Hi,
Let's say I have a 10x10 matrix A. I wish to run each unique pair of elements from that matrix (e.g. (1,1),(1,2),...,(1,10) - not to repeat (2,1) for instance) in a function that I have. Any ideas how this can be possible?
Thanks!

 採用された回答

Geoff Hayes
Geoff Hayes 2015 年 1 月 28 日

0 投票

Fred - if you just want to loop over each unique pair of elements in the matrix, then consider doing something like
% assume A is 2D
[r,c] = size(A);
for m=1:r
for n=m:c
% do something with pair (m,n)
end
end
Try the above and see what happens!

2 件のコメント

Fred John
Fred John 2015 年 1 月 29 日
Thanks. But would it be:
for m=1:r
for n=1:r
end
end
to loop over EVERY pair? And how would I write the output matrix? Something like this? :
outputm(m,n)=myfunction(a,b,c) % function and inputs
end
Geoff Hayes
Geoff Hayes 2015 年 1 月 30 日
Yes, if you assume that the matrix is square and you want loop over each pair (and not the unique ones) then you can do as above (though use c for the number of columns for the case where your matrix is not square). And yes, you can write your output matrix as described above (consider pre-sizing it since you know the dimensions).

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

その他の回答 (1 件)

Guillaume
Guillaume 2015 年 1 月 28 日

0 投票

To get your pair indices:
maxpair = 10; %? a 10x10 matrix has 100 elements.
indices = [repmat([1:maxpair]', 1, 2); nchoosek(1:maxpair, 2)]
You can then use each row of indices as indices into your matrix:
m = randi(1000, 10, 10); %for example
maxpair = numel(m);
indices = [repmat([1:maxpair]', 1, 2); nchoosek(1:maxpair, 2)];
pairs = cellfun(@(row) m(row), num2cell(indices, 2), 'UniformOutput', false) %is this what you want?

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

質問済み:

2015 年 1 月 28 日

コメント済み:

2015 年 1 月 30 日

Community Treasure Hunt

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

Start Hunting!

Translated by