How to rewrite my code without loops?

3 ビュー (過去 30 日間)
Valeri Aronov
Valeri Aronov 2021 年 8 月 22 日
コメント済み: Valeri Aronov 2021 年 8 月 22 日
How to rewrite this code without loops:
Grad = zeros(size(x));
for i=1:length(x)
for j=1:length(f)
Grad(i) = Grad(i) + 2*GradW(i,j).*dev(j);
end
end
Thanks.

採用された回答

Walter Roberson
Walter Roberson 2021 年 8 月 22 日
lenth(f) has no obvious relationship to any of the rest of the code. Is f shorter than dev is so you are only wanting to do a subset of dev ? If you are wanting all of dev then use the number of elements in dev, not the number in f.
You initialize Grad to size(x) but you only iterate i as the length(x) not as the number of elements in x.
It is not obvious that length(x) or size(x) is related to the size of GradW or dev.
GradW = (1:5).*(2:4).'
GradW = 3×5
2 4 6 8 10 3 6 9 12 15 4 8 12 16 20
dev = [-2 3 -4 5 -6]
dev = 1×5
-2 3 -4 5 -6
x = randi(9, 1, size(GradW,1)) %contents not actually used, but shape is
x = 1×3
1 4 3
f = randi(9, 1, size(GradW,2)) %contents not actuall yused, but length is
f = 1×5
8 9 6 8 7
answer1 = reshape(2*GradW * dev(:), size(x))
answer1 = 1×3
-72 -108 -144
Grad = zeros(size(x));
for i=1:length(x)
for j=1:length(f)
Grad(i) = Grad(i) + 2*GradW(i,j).*dev(j);
end
end
answer2 = Grad
answer2 = 1×3
-72 -108 -144
You can see the probable simple formula at answer1, but because your sizes are not related to the variables you calculate on, we cannot be sure.
It seems odd to want to force the answer to be the shape of x; it would make more sense to let it be a column vector (in which case skip the reshape() of answer1)
  1 件のコメント
Valeri Aronov
Valeri Aronov 2021 年 8 月 22 日
Right.
1) length(x) was there because the lengths of multiple other arrays were deduced from length(x). You are certainly right: using length(dev) here makes for more robust code.
2) similarly it is better to use length(GradW(:,1)) instead of length(f). My motivation was the same as in 1)
3) regardless of 1)-2) your suggested code:
Grad = 2*GradW * dev(:);
does exactly what I want. I knew that you will come up with something strikingly simple ofr my case. Thanks.

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLanguage Support についてさらに検索

タグ

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by