Run function for paired data?

조회 수: 4 (최근 30일)
Fred John
Fred John 2015년 1월 28일
댓글: Geoff Hayes 2015년 1월 30일
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일
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일
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?

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by