Exclude matrix diagonal in for loop

1 回表示 (過去 30 日間)
Fred John
Fred John 2015 年 3 月 9 日
編集済み: Michael Haderlein 2015 年 3 月 9 日
Hi,
Let's say I have a 20x20 matrix for which I wish to run some formulas over a loop. But I wish to exclude the main diagonal (1,1 to 20,20) from the for loop.
I came up with:
for j=2:20
for i:(j-1)
Any thoughts please?
Thanks

回答 (2 件)

Guillaume
Guillaume 2015 年 3 月 9 日
編集済み: Guillaume 2015 年 3 月 9 日
Your second for is not going to do much. This is one way to do it:
for row = 1:size(matrix, 1) %use better names than i or j and don't hardcode sizes
for col = 1:size(matrix, 2)
if col ~= row %if not on diagonal
%do calculation
end
end
end
However, if you can vectorise your calculation and forego the loops entirely that would be even better.

Michael Haderlein
Michael Haderlein 2015 年 3 月 9 日
編集済み: Michael Haderlein 2015 年 3 月 9 日
In case you cannot vectorize the problem, why don't you simply check for equality?
for cnt1 = 1:20
for cnt2=1:20
if cnt1~=cnt2
%calculations
end
end
end

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by