Why is Matlab not abled to run this as a parfor loop?

조회 수: 1 (최근 30일)
Matthias
Matthias 2013년 4월 19일
I want to run a loop like this as a parfor loop. In my eyes it shouldn't matter in which order the different iterations are called. 'a' is only used as reduction variable.
a = zeros(1,5);
parfor i= 1:1000
dts = randi(10)-1;
if dts == 0
a(1) = a(1) + 2;
elseif dts <= 5
a(dts) = a(dts) +1;
end
end
This is the error, which i get:
Error using Test (line 2) Error: The variable a in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview". Why wouldn't Matlab allow this program? How do i fix it?
Edit: Since the Codeblock-function doesn't seem to work: http://pastebin.com/FUHFe61T
  댓글 수: 2
Sean de Wolski
Sean de Wolski 2013년 4월 19일
That doesn't even work with a regular for-loop. That should always be the first step: making sure it works with a regular loop.
Matthias
Matthias 2013년 4월 19일
I had a little typo. It is supposed to be randi(10) not rand(10).

댓글을 달려면 로그인하십시오.

채택된 답변

Friedrich
Friedrich 2013년 4월 19일
편집: Friedrich 2013년 4월 19일
Hi,
MATLAB thinks a is a sliced variable and you get troubles with the indices here. I think in such a case its better to use a Reduction Variable like this:
X = zeros(1,5);
parfor i= 1:1000
a = zeros(1,5);
dts = randi(10)-1;
if dts == 0
a(1) = (a(1) + 2);
elseif dts <= 5
a(dts) = a(dts) +1;
end
X = X + a;
end
For more information about variable types see here:

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by