find all the possible pairs with postive elements from a given matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Ahmed khliaa
am 16 Okt. 2017
Bearbeitet: Andrei Bobrov
am 17 Okt. 2017
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 Kommentare
Akzeptierte Antwort
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))])
0 Kommentare
Weitere Antworten (2)
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
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);
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
am 16 Okt. 2017
I'm voting for Andrei! Next time I'll remember FULLFACT instead of creating a volume ..
Siehe auch
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!