find all the possible pairs with postive elements from a given matrix
2 ビュー (過去 30 日間)
古いコメントを表示
Hi everybody, I have a specefic Problem to solve which a little bit complicated. lets say i have a 3*3 matrix(rows are the outputs and columns are the inputs ) with negative and positive values.
example:
A= [0.1 -1.5 -0.1;
-5.2 1.7 1.8;
2.9 -3.1 0.1]
so the possible pairs will be :
A(1,1) A(2,2) A(2,3)
A(1,1) A(2,2) A(3,3)
A(3,1) A(2,2) A(2,3)
A(2,1) A(2,2) A(3,3)
so that every inputs become an output with the condition of the positive coresponding element.
any propositions or keywords or functions to solve this specific problem ?
0 件のコメント
採用された回答
Andrei Bobrov
2017 年 10 月 16 日
t = A > 0;
k = (1:size(A,1))'.*t;
p = arrayfun(@(x)k(k(:,x) > 0,x),1:size(A,2),'un',0);
jj = cellfun(@numel,p);
ii = flip(fullfact(flip(jj,2)),2);
out = A(t);
out = out(ii+[0,cumsum(jj(1:2))])
0 件のコメント
その他の回答 (2 件)
Guillaume
2017 年 10 月 16 日
Another way to open the same result:
A = [0.1 -1.5 -0.1;
-5.2 1.7 1.8;
2.9 -3.1 0.1];
B = cellfun(@(col) col(col>0), num2cell(A, 1), 'UniformOutput', false);
[B{:}] = ndgrid(B{:});
B = reshape(cat(4, B{:}), [], 3)
1 件のコメント
Andrei Bobrov
2017 年 10 月 17 日
編集済み: Andrei Bobrov
2017 年 10 月 17 日
Super! (my favorite tools), +1! Small edit:
B = cellfun(@(col) col(col>0), num2cell(A, 1), 'UniformOutput', false);
[B{end:-1:1}] = ndgrid(B{end:-1:1});
B = reshape(cat(4, B{:}), [], 3);
Cedric
2017 年 10 月 16 日
編集済み: Cedric
2017 年 10 月 16 日
It looks like you want triplets, or I don't understand the question:
>> posUnique = unique( A(A > 0) )
posUnique =
0.1000
1.7000
1.8000
2.9000
>> ids = nchoosek( 1:numel(posUnique), 3 )
ids =
1 2 3
1 2 4
1 3 4
2 3 4
>> B = Apos(ids)
B =
0.1000 2.9000 1.7000
0.1000 2.9000 1.8000
0.1000 1.7000 1.8000
2.9000 1.7000 1.8000
4 件のコメント
Cedric
2017 年 10 月 16 日
I'm voting for Andrei! Next time I'll remember FULLFACT instead of creating a volume ..
参考
カテゴリ
Help Center および File Exchange で Particle & Nuclear Physics についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!