Filter löschen
Filter löschen

Parfor error with bsxfun

1 Ansicht (letzte 30 Tage)
Cem
Cem am 9 Jul. 2014
Bearbeitet: Matt J am 9 Jul. 2014
Dear all,
I'm having a weird issue with using parfor and bsxfun. I provide a minimal working example below (tried on both 2011b and 2013a). The version with for is working fine, whereas if I switch to parfor, I receive the 'non-singleton dimensions must match' error for bsxfun. I'm not sure if this was already answered although I looked for possible related questions&answers. Thanks in advance.
Cem
var1=repmat((1:1000)',2,3);
var2=ones(1000,1000);
var3=ones(6000,1);
temporary_var=bsxfun(@times,var2(var1,:),var3);
result=zeros(1000,1000);
for i=1:1000
result(i,:)=sum(bsxfun(@times,var2(var1,i),temporary_var));
end
Note: the issue persists both matlabpools open and closed.

Akzeptierte Antwort

Jill Reese
Jill Reese am 9 Jul. 2014
I think that the parfor analysis is getting a bit confused by the multidimensional indexing into var2. If you re-write the code as follows it should work:
var1=repmat((1:1000)',2,3);
var2=ones(1000,1000);
var3=ones(6000,1);
temporary_var=bsxfun(@times,var2(var1,:),var3);
result=zeros(1000,1000);
tmp = var2(var1,:);
parfor i=1:1000
result(i,:)=sum(bsxfun(@times,tmp(:,i),temporary_var));
end
  1 Kommentar
Matt J
Matt J am 9 Jul. 2014
Bearbeitet: Matt J am 9 Jul. 2014
@Cem,
If this is what you want, the parfor loop looks like a doubtful way to go about it. A loop-free computation of the same result is
result=tmp.'*temporary_var;
which would likely have better internal optimization/parallelization than parfor.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Parallel for-Loops (parfor) finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by