populate matrix columns based on a vector of index vector

8 次查看(过去 30 天)
I generate an 8x8 A matrix below. I also have an 8x1 vector B containing random integer numbers from 1 to 8. And, I have an 8x1 C vector containing numbers obtained below. How can I, for all rows of A, populate those columns of A starting at B to the end, with values of corresponding rows in C without going through a loop (i.e. vectorized).
A=rand(8);
B = randi([1 8], 8, 1);
C=-linspace(8,30,8)';
  2 个评论
MatG
MatG 2020-6-12
Imagine
A = [
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5]
And
B = [1 3 4 2 5]
C = [-10 -9 -5 -2 -1];
Then, I want A(1,B(1):end) = C(1), A(2,B(2):end) = C(2), ....
So I get:
A = [-10 -10 -10 -10 -10
1 2 -9 -9 -9
1 2 3 -5 -5
1 -2 -2 -2 -2
1 2 3 4 -1]

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2020-6-12
编辑:Stephen23 2020-6-12
>> X = (1:5)>=B(:); % requires >=R2016b, for earlier versions replace >= with BSXFUN
>> [R,~] = find(X);
>> A(X) = C(R)
A =
-10 -10 -10 -10 -10
1 2 -9 -9 -9
1 2 3 -5 -5
1 -2 -2 -2 -2
1 2 3 4 -1

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by