nam*_*nam 1 matlab matrix vectorization
我有一个b包含30个条目的向量.
我想避免使用for循环来构造这样的矩阵:
其中b_i是i向量的第n个条目b.
例如,定义向量
b = [2 6 -7 3 1 -4 -1 1 11 8 -4 9 2 0 2 -1 0 4 4 4 2 -4 2 5 1 3 2 -1 1 -2]
Run Code Online (Sandbox Code Playgroud)
我尝试使用for循环的地方是:
A = zeros(5,5);
for i = 1:5
A(i) = b(i+5);
A(i+5) = b(i+6);
A(i+10) = b(i+7);
A(i+15) = b(i+8);
A(i+20) = b(i+9);
end
Run Code Online (Sandbox Code Playgroud)
结果是
有没有更快更通用的方法来生成这个矩阵?
你可以使用toeplitz:
A=fliplr(toeplitz(b(10:14),b(10:-1:6))
A =
-4 -1 1 11 8
-1 1 11 8 -4
1 11 8 -4 9
11 8 -4 9 2
8 -4 9 2 0
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这里的索引是你的例子中的6到14,而不像图中那样是7到15.您可以将其更改为您的首选目的.