find all the possible pairs with postive elements from a given matrix

1 Ansicht (letzte 30 Tage)
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 ?

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 16 Okt. 2017
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))])

Weitere Antworten (2)

Guillaume
Guillaume am 16 Okt. 2017
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 Kommentar
Andrei Bobrov
Andrei Bobrov am 17 Okt. 2017
Bearbeitet: Andrei Bobrov am 17 Okt. 2017
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);

Melden Sie sich an, um zu kommentieren.


Cedric
Cedric am 16 Okt. 2017
Bearbeitet: Cedric am 16 Okt. 2017
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 Kommentare
Cedric
Cedric am 16 Okt. 2017
I'm voting for Andrei! Next time I'll remember FULLFACT instead of creating a volume ..

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Linear Algebra finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by