Array indexing in parfor loops, why does this simple code not work?
2 次查看(过去 30 天)
显示 更早的评论
Hi everybody,
I have recently been looking into parfor loops, mostly out of curiosity.
I have lots of loops which follow this syntax:
A = {};
B = [1 3 6];
parfor i = 1:3
A{B(i)} = i;
end
A
I don't understand why this code produces an error, I know that the order in which the calculations may be carried out are random but both A and B are defined outside the loop, the index into both is given by the loop number 'i' and the results can be entered into A randomly as it's an array. So why does this code fail?
Any help would be greatly appreciated,
Rod.
EDIT
My problem is basically that I have input matrices or vectors and for loops which I want to swap to parfor, but often I only want to access certain parts of each input matrix or vector. parfor won't accept a non continuous index like parfor i = [1 3 6], but you also can't use [1 3 6] as an index inside the loop because values might be duplicates.
The solution I've found is the inclusion of an if statement:
A = {};
parfor i = 1:6
if i == 1||i == 3||i == 6
A{i} = i;
end
end
A
Serious coders here will probably laugh at me, but it does what I want.
0 个评论
采纳的回答
Jos
2014-7-19
You're getting the cell index for A out of vector B, however B could be defined with multiple elements having the same value (e.g. B=[1 1 6];), if this would occur multiple parallel instances would be attempting to access the same cell of A at the same time
5 个评论
Jos
2014-7-19
Just had a look there, cause I wanted to understand the reason properly too. You wanted to use A as a sliced variable, but it can't be a sliced variable because it doesn't satisfy the characteristics criterion for the form of indexing which states that (from the parfor help file) "Within the list of indices for the variable, exactly one index involves the loop variable" and "Within the list of indices for a sliced variable, one of these indices is of the form i, i+k, i-k, k+i, or k-i, where i is the loop variable and k is a constant or a simple (nonindexed) broadcast variable; and every other index is a constant, a simple broadcast variable, colon, or end"
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!