Replace specific values in a matrix with zeros
17 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Luan Nguyen Thanh
il 18 Nov 2017
Commentato: Luan Nguyen Thanh
il 18 Nov 2017
Assume, I have two matrices like this:
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
B = [3 2 4 5 2 1];
I want to produce a matrix C below from matrix A & B like this:
C =
35 1 6 26 19 24
3 32 7 21 23 0
31 0 2 22 0 0
0 0 33 17 0 0
0 0 0 12 0 0
where the ith element in matrix B determines "the number of elements in matrix A's ith column" that will bring to the ith column of the matrix C. For example, B(1) = 3 means that the 1st column of matrix C is equal to
[A(1:B(1),1) ; zeros(5-B(1),1)];
So is there any way for me to produce matrix C from A & B without using any "loop" command?
0 Commenti
Risposta accettata
Stephen23
il 18 Nov 2017
Modificato: Stephen23
il 18 Nov 2017
In one line:
>> A = [...
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16];
>> B = [3,2,4,5,2,1];
>> C = A.*bsxfun(@le,(1:size(A,1)).',B)
C =
35 1 6 26 19 24
3 32 7 21 23 0
31 0 2 22 0 0
0 0 33 17 0 0
0 0 0 12 0 0
Più risposte (2)
Bshara Murr
il 18 Nov 2017
Modificato: Bshara Murr
il 18 Nov 2017
Hello, yes try this:
A =[35 1 6 26 19 24; 3 32 7 21 23 25; 31 9 2 22 27 20; 8 28 33 17 10 15; 30 5 34 12 14 16;];
B = [3 2 4 5 2 1];
[x y]= size(A);
C = zeros(x,y);
for i = 1:y
for j = 1:B(i)
C(j,i) = A(j,i);
end
end
I just used the matrices you entered.
0 Commenti
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!