MATLAB: Assigning a vector to multiple rows of a matrix

matrix assignment

Hi all,
This is actually something I've been wondering for a while… Say I have a 1-by-4 vector A and a 5-by-4 matrix B. Now I want to assign the vector A to certain rows of B, but unfortunately you can't do something like
B([1,3,5],:)=A
since the dimensions will mismatch. What I ended up doing is
B([1,3,5],:)=repmat(A,3,1)
which works but seems really ugly (and probably slow as well since I used repmat). Is there a better way to do this?
Thanks!
Niko

Best Answer

You could try using indices instead of subscripts:
%pick the rows in B you want to your A values to go into:
r = [1 3 5];
%and the corresponding columns:
c = [1 2 3];
%now get your indices:
idx = sub2ind(size(B),r,c);
%and use these indices as follows:
B(idx) = A(c);
This assumes that you want your columns filled in the order that they are found in A, but you could just as easily make a different index into A to pick particular values from that vector. This works as long as you ask for the same number of values from A as you have slots in B, if you follow me.
B(idx) = A([2 3 4]);