请参阅以下内容:
Constructing a special matrix in numpy dynamically
现在有没有办法以类似的方式创建矩阵,其中对角线值本身就是矩阵。例如:
[A 0 0 0]
[0 A 0 0]
[0 0 A 0]
[0 0 0 A]
其中A是例如:
[1 1]
[1 1]
和0是一个类似的大小矩阵,所以
[0 0]
[0 0]
也许,使用链接中的答案中介绍的方法。即np.diag(Matrix*s,0)
。
假设我还想要一些与之前相同大小的其他矩阵,但是这个矩阵会在A
上方和下方运行对角线,如下所示:
[A B 0 0]
[B A B 0]
[0 B A B]
[0 0 B A]
答案 0 :(得分:2)
就我个人而言,我认为@Divakar的建议最好,将numpy.kron
与numpy.eye
结合使用。关键是使用np.eye(N, M=N, k)
,其中k
指定单位矩阵的对角线。使用k = 0
作为标准身份,但对于非对角线术语,请使用k = +/- 1
。例如:
A = np.ones((2,2))
B = 2*A
C = np.kron(np.eye(4), A)
C += np.kron(np.eye(4, k=1), B)
C += np.kron(np.eye(4, k=-1), B)
产量
array([[ 1., 1., 2., 2., 0., 0., 0., 0.],
[ 1., 1., 2., 2., 0., 0., 0., 0.],
[ 2., 2., 1., 1., 2., 2., 0., 0.],
[ 2., 2., 1., 1., 2., 2., 0., 0.],
[ 0., 0., 2., 2., 1., 1., 2., 2.],
[ 0., 0., 2., 2., 1., 1., 2., 2.],
[ 0., 0., 0., 0., 2., 2., 1., 1.],
[ 0., 0., 0., 0., 2., 2., 1., 1.]])