2015-11-04 137 views
1

请参考下面的:矩阵具有相同的对角线

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] 
+5

['从给定的numpy的array'创建块对角线numpy的阵列(http://stackoverflow.com/questions/33508322/create-block-diagonal- numpy-array-from-given-numpy-array)可能有帮助吗?在你的情况下,'n = 4; out = np.kron(np.eye(n),A)'。 – Divakar

+0

可能会诀窍:)谢谢。这是否适用于紧靠A之上或之下的对角线? –

+0

编辑你的问题与这种情况下,请解释预期的输出。 – Divakar

回答

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.]]) 
+0

很好的使用这个“抵消”的东西,'k'! – Divakar