How to implement following in matlab?
조회 수: 1 (최근 30일)
이전 댓글 표시
suppose I have a matrix:
A=[1 2;2 2;5 2;6 2;3 1;4 1]
I want the matrix: B=[1 2;1 5;1 6;2 5;2 6;5 6] in 1st iteration which are the combinations of first column elements of rows that have the second column as 2. and B=[1 3;2 3;5 3;6 3;1 4;2 4;5 4; 6 4;] in the second iteration which are the combinations of first column elements of rows that have the second column as 2 and 1. and B=[3 4] in the third iteration which are the combinations of first column elements of rows that have the second column as 1.
댓글 수: 2
dpb
2015년 7월 1일
I can't figure out what your description means by comparing to the above B and A. Show us precisely the rule for the rearrangement.
답변 (3개)
Mark Matusevich
2015년 7월 2일
Make a function which gets a vector and creates all combinations, then call it 3 times:
B1 = combinations(A(1,A(:,2)==2));
B2 = combinations(A(1,ismember(A(:,2),[1 2])));
B2 = combinations(A(1,A(:,2)==1));
Implement the 'combinations' function using 'ndgrid' and
tril(ones(n,n),-1)
Thorsten
2015년 7월 2일
편집: Thorsten
2015년 7월 2일
You can do this using nchoosek and ismember:
A = [1 2;2 2;5 2;6 2;3 1;4 1];
col2val{1} = 2;
col2val{2} = [1 2];
col2val{3} = 1;
B = A;
for i = 1:numel(col2val);
x = A(ismember(A(:,2), col2val{i}), 1)
if numel(x) < 2, break; end % cannot generate pairs of less than 2 numbers
pairs = nchoosek(1:numel(x), 2);
B = x(pairs)
end
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 View and Analyze Simulation Results에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!