具有相同对角线的矩阵

时间:2015-11-04 18:48:53

标签: python numpy matrix

请参阅以下内容:

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]

1 个答案:

答案 0 :(得分:2)

就我个人而言,我认为@Divakar的建议最好,将numpy.kronnumpy.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.]])