matlab - matlab修复切片以执行parfor
问题描述
只是从平行的东西开始......
我有一个代码归结为用可变长度的数组填充矩阵的列A
(用 s 预先分配):NaN
A = nan(100);
for ii=1:100
hmy = randi([1,100]); %lenght of the array
A(1:hmy,ii) = rand(hmy,1); %array
end
简单地转换for
in aparfor
甚至不会运行
parfor ii=1:100
hmy = randi([1,100]); %how many not NaN values to put in
A(1:hmy,ii) = rand(hmy,1);
end
因为 parfor 不喜欢索引:
MATLAB 在 parfor 函数中运行循环,方法是将循环迭代分成组,然后将它们发送给并行运行的 MATLAB 工作程序。为了使 MATLAB 以可重复、可靠的方式执行此操作,它必须能够对循环中使用的所有变量进行分类。该代码以与分类不兼容的方式使用指示的变量。
我认为这是由于第一个维度上的索引并尝试了一种不起作用的解决方法(与以前相同的错误消息):
parfor ii=1:100
hmy = randi([1,100]);
tmp = [rand(hmy,1); NaN(size(A,1)-hmy,1)];
A(:,ii) = tmp;
end
如何索引A
以存储数组?
解决方案
您不能部分更改 A 中的行或列数据。您必须在 parfor 中执行整行或整列。这是更新的代码。
A = nan(100);
parfor ii=1:100
hmy = randi([1,100]); %lenght of the array
temp = nan(1,100);
temp(1:hmy) = rand(hmy,1); %array
A(:,ii) = temp; %updating full row of iith column
end
推荐阅读
- python - 任何一个访问电子表格,Python Script 将详细信息添加到其他电子表格
- sql - Export data table from Databricks dbfs to azure sql database
- node.js - 内部/模块/cjs/loader.js:456 抛出 e;^ 错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:没有“出口”主要定义在
- c# - 如何将通过一列和每个连接表的一列的计数连接两列和组的 SQL 查询转换为 LINQ?
- python - 如何从另一部字典中以新月形式组织字典
- c# - DevExpress RibbonControl page author
- python - -discord.py- Sorting JSON files without overwriting the entire file
- c++ - Communication between parent and child process using pipe in c++
- c# - 有没有办法使用 itext7 和 C# 获取 PdfDocument 对象的完整路径(甚至只是文件名)?
- resnet - Resnetv2 -> Which block for skip connection (U-Net)?