MATLAB: Replace specific values in a matrix with zeros

matrix

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?

Best Answer

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