Assigning a vector to multiple rows of a matrix
46 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
W. Owen Brimijoin
2014-5-16
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]);
1 个评论
更多回答(2 个)
Jos (10584)
2014-5-16
Indeed, it looks a little ugly. However, using repmat is not that slow. Another, little uglier, but slightly faster and more straightforward solution is using a for-loop
A = 1:5
B = zeros(5,5) ;
for k = [1 3 5], B(k,:) = A ; end
2 个评论
Chenglei QIAO
2020-5-28
Thanks! but I'm wondering why in this case, the for loop is even faster than the built-in repmat function?
Yao Li
2014-5-16
b=ones(5,4);
a=[1;2;3;4];
If you wanna assign a to the 3rd row of b,
b=[b(1:2,:);a';b(4:5,:)]
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!