selecting rows from C with associated values in D, while using A and B values as references to produce E and F matrices
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
JL
am 14 Sep. 2019
Bearbeitet: per isakson
am 15 Sep. 2019
Hi everyone, I have 2 matrices, A and B, that I want to use as reference to draw out certain rows in C and attached associated values from D.
A = [1 2];
B = [1 3];
C = [ 1 19 18 4 3 0 0 0 0 0 0
1 19 2 17 6 7 5 4 3 2 0
1 16 15 17 6 7 5 4 3 2 0
1 19 2 3 0 0 0 0 0 0 0
1 16 15 14 9 8 7 5 4 3 2
1 16 15 14 9 6 5 4 3 2 0
1 2 3 0 0 0 0 0 0 0 0
];
D = [0.1
0.3
0.4
0.8
0.9
0.11
0.2
];
my end results for E and F should be:
E = [0.1 1 19 18 4 3 0 0 0 0 0 0
0.8 1 19 2 3 0 0 0 0 0 0 0
0.2 1 2 3 0 0 0 0 0 0 0 0
];
F = [0.3 1 19 2 17 6 7 5 4 3 2 0
0.4 1 16 15 17 6 7 5 4 3 2 0
0.9 1 16 15 14 9 8 7 5 4 3 2
0.11 1 16 15 14 9 6 5 4 3 2 0
];
2 Kommentare
Akzeptierte Antwort
Bruno Luong
am 14 Sep. 2019
Bearbeitet: Bruno Luong
am 14 Sep. 2019
A = [1 2];
B = [1 3];
C = [ 1 19 18 4 3 0 0 0 0 0 0;
1 19 2 17 6 7 5 4 3 2 0;
1 16 15 17 6 7 5 4 3 2 0;
1 19 2 3 0 0 0 0 0 0 0;
1 16 15 14 9 8 7 5 4 3 2;
1 16 15 14 9 6 5 4 3 2 0;
1 2 3 0 0 0 0 0 0 0 0
];
D = [0.1;
0.3;
0.4;
0.8;
0.9;
0.11;
0.2
];
[i,j] = find(C);
getC = @(pickfun) C(sub2ind(size(C),(1:size(C,1))',accumarray(i(:),j(:),[],pickfun)));
filtFun = @(x) ismember([getC(@min),getC(@max)],x,'rows');
b = filtFun(B);
E = [D(b,:),C(b,:)]
b = filtFun(A);
F = [D(b,:),C(b,:)]
Weitere Antworten (1)
per isakson
am 14 Sep. 2019
Bearbeitet: per isakson
am 15 Sep. 2019
The script
%%
ixe = [1,4,7];
E = cat( 2, D(ixe), C(ixe,:) );
ixf = setdiff( [1:7], ixe );
F = cat( 2, D(ixf), C(ixf,:) );
calculates E and F that agrees with your sample.
However, I cannot see how the rows 1, 4 and 7, honors the rules you provide in your comment.
In response to comment
ixe = find_rows( C, B );
E = cat( 2, D(ixe), C(ixe,:) );
ixf = find_rows( C, A );
F = cat( 2, D(ixf), C(ixf,:) );
%
function ix_rows = find_rows( C, FL );
ix_rows = nan( 1, size(C,1) );
for jj = 1 : size( C, 1 )
row = C(jj,:);
row(row==0) = [];
if row(1)==FL(1) && row(end)==FL(2)
ix_rows(jj) = jj;
end
end
ix_rows( isnan( ix_rows ) ) = [];
end
Siehe auch
Kategorien
Mehr zu Startup and Shutdown 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!