Parfor and symmetric matrix

2 ビュー (過去 30 日間)
Maria
Maria 2021 年 8 月 12 日
編集済み: Matt J 2021 年 8 月 13 日
Hi,
I need to fill in a matrix. Since it is symmetrical, the two for loops look like this
for i = 1 : m
for j = i : n
operation on the matrix ....
end
end
The other elements of the matrix are filled in by using "permute" (it is a 3D matrix).
I am now modifying the code to make it parallelizable. I tried with the parfor like this
parfor i = 1 : m
for j = i : n
operation on the matrix ....
end
end
At running time, I get the error because matlab does not know the value of "i". I guess this is because the two "for" are not independent.
My question is:
  • is there a way to fill in a symmetric matrix by exploiting the symmetry, and using the parfor? Or shall I ignore the symmetry, have the second "for" starting from 1, and getting rid of "permute" ?

回答 (1 件)

Matt J
Matt J 2021 年 8 月 12 日
編集済み: Matt J 2021 年 8 月 12 日
[I,J]=ndgrid(1:m,1:n);
keep=J>=I;
I=I(keep);
J=J(keep);
parfor k=1:numel(I)
i=I(k);
j=J(k);
operation on the matrix ....
end
  4 件のコメント
Matt J
Matt J 2021 年 8 月 13 日
編集済み: Matt J 2021 年 8 月 13 日
Here's one possible fix.
temp = zeros(m,n);
H=0;
parfor k=1:numel(I)
dH=temp;
i=I(k);
j=J(k);
dH(i,j) = 3;
H=H+dH;
end
Matt J
Matt J 2021 年 8 月 13 日
編集済み: Matt J 2021 年 8 月 13 日
Another possible fix (probably better):
temp = zeros(size(I));
H=0;
parfor k=1:numel(I)
temp(k)=3;
end
idx=sub2ind([m,n],I,J);
H(idx)=temp(:);

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by