我想在对角线 m
上重复长度 n
的向量 A
次以获得 (n+m -1) x m
矩阵 B
。例如,A = [a;b;c;d]
,m = 4
。这应该导致
B =
[a 0 0 0;
b a 0 0;
c b a 0;
d c b a;
0 d c b;
0 0 d c;
0 0 0 d]
有什么快速实现这一目标的建议吗? blkdiag(repmat(A,1,m))
在这种情况下对我没有帮助,因为它创建了一个 (n*m) x m
矩阵。
最后我实际上只对第三个矩阵 C
与 B
的矩阵乘积 D
感兴趣:
D=C*B
如果您看到另一个无需生成 B
即可获得 D
的选项,我将不胜感激。但是解决上述问题也会让我很高兴!顺便说一下,n
和 m
会很大。
谢谢!
最佳答案
因为@mathematician1975 懒得写出正确的答案。
Matlab 有一个函数,叫做 toeplitz
你可以这样调用它:
c=[1;2;3;4;0;0;0];
r=[0, 0, 0, 0];
toeplitz(c,r)
ans =
1 0 0 0
2 1 0 0
3 2 1 0
4 3 2 1
0 4 3 2
0 0 4 3
0 0 0 4
您可以使用零来按照您想要的方式塑造矩阵。
关于matlab - 如何在 Matlab 中沿对角线重复一个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959040/