我想在matlab中并行化我的部分代码。例如,以下部分:
v1=[1,3,6,8];
ggx=5.*ones(15,14);
gax=ones(15,14);
parfor i = 1:length(v1)
m = v1(i);
if m > 1
gax(1:m-1,m-1) = ggx(1:m-1,m-1);
end
if m<nn
gax(m+1:end,m) = ggx(m+1:end,m);
end
end但是有一个错误: error: parfor中的变量gax不能与MATLAB中的classified.See并行,称为“概述”。
有人知道如何删除错误吗?其他有用的信息是,v1是一个不包含任何重复元素的递增向量。
发布于 2017-06-04 00:19:54
正如错误消息中提到的,您必须遵循切片变规则。gax和gay都违反了Fixed Index Listing和Form of Indexing的规则。此外,您还可以将此示例A(i,20:30,end) % 20:30 not scalar作为文档中没有切片的变量的示例。
因此,您应该将parfor的所有部分更改为获得适当的并行计算。换句话说,您必须设计一个适当的并行算法,可以根据循环变量对该方法进行并行化。
一级索引的类型-第一级索引要么是括号(),要么是大括号{}。 固定索引列表-在第一级括号或大括号内,索引列表对于给定变量的所有出现都是相同的。 索引的形式-在变量的索引列表中,正好有一个索引涉及循环变量。 数组的形状-数组保持不变的形状。在为切片变量赋值时,赋值的右侧不能是[]或'',因为这些运算符试图删除元素。
https://stackoverflow.com/questions/44348921
复制相似问题