Replace specific values in a matrix with zeros
Show older comments
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?
Accepted Answer
More Answers (2)
Bshara Murr
on 18 Nov 2017
Edited: Bshara Murr
on 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.
Try this,
[r c] = size(A);
C = zeros(r,c);
indx = bsxfun(@le,repmat((1:r).',1,c),repmat(B,r,1)) %find indicies
C(indx) = A(indx)
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
Categories
Find more on Multidimensional Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!