我希望使用import array
import sys
lowLevelArray = array.array("i", [1,2,3])
print sys.getsizeof(lowLevelArray[0])
pythonList = [1,2,3]
print sys.getsizeof(pythonList[0])
作为嵌套循环,我已经举例说明了我的结构:
parfor
MATLAB给出了错误:temp_vars = 1:10;
global_arr = zeros(10,10);
parfor i=0:9
for j=0:9
constant_var = temp_vars(i+1);
global_arr(i+1, j+1) = i*j*constant_var;
end
end
。
但是,如果我将Error: The variable global_arr in a parfor cannot be classified.
和i
的值更改为j
而不是1..10
,那么它会神奇地运作良好。那是为什么?
答案 0 :(得分:1)
问题是您使用相对索引而不是绝对索引来引用global_arr
(即i+1
而不是i
)。当你使用并行for
时,global_arr
的每个'切片'都是独立计算它在循环中的位置,相对索引意味着依赖位置,这是禁止的。
请改为尝试:
parfor i = 1:10;
for j = 1:10;
constant_var = temp_vars(i);
global_arr(i, j) = (i-1)*(j-1)*constant_var;
end
end
更准确地说,只有parfor
循环中的第一个索引可以依赖于循环迭代器,所有其他索引都被视为常量。因此,您可以以相对方式使用i
,但不能j
:
parfor i = 0:9;
for j = 1:10;
constant_var = temp_vars(i+1);
global_arr(i+1,j) = i*(j-1)*constant_var;
end
end
当您使用其他变量和循环变量来索引时 数组,你不能在循环内设置这些变量。实际上,这样的 变量在执行整个parfor时是不变的 声明。您无法将循环变量与其自身组合以形成 索引表达。