Python:如何使用块矩阵作为对角线创建对角矩阵

时间:2017-11-26 16:02:28

标签: python python-3.x numpy matrix scipy

我需要创建一个图片中所示形式的矩阵,这是一个9x9矩阵,但我想为NxN矩阵创建一个给定值为N的矩阵。

是否可以通过首先定义两个块矩阵来创建它,其中第一个沿对角线重复,第二个重复由1和-1的对角线偏移重复?

这显示了我需要的最终矩阵的图片:

1 个答案:

答案 0 :(得分:2)

我创建了一个function来做你想要的,即使你没有自己尝试,因为我认为这是一个很酷的问题。

function使用broadcasting3x3上分配diagonals块。

def matrix(n):
    a = np.zeros((n,n), np.int8)
    for d in range(0, int(n/3)+4, 3):
        a[d:d+3, d:d+3] = np.array([[-4, 1, 0], [1, -4, 1], [0, 1, -4]])
    for d in range(0, int(n/3)+3, 3):
        a[d:d+3, d+3:d+6] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
        a[d+3:d+6, d:d+3] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
    return a

和测试:

>>> matrix(9)
array([[-4,  1,  0,  1,  0,  0,  0,  0,  0],
       [ 1, -4,  1,  0,  1,  0,  0,  0,  0],
       [ 0,  1, -4,  0,  0,  1,  0,  0,  0],
       [ 1,  0,  0, -4,  1,  0,  1,  0,  0],
       [ 0,  1,  0,  1, -4,  1,  0,  1,  0],
       [ 0,  0,  1,  0,  1, -4,  0,  0,  1],
       [ 0,  0,  0,  1,  0,  0, -4,  1,  0],
       [ 0,  0,  0,  0,  1,  0,  1, -4,  1],
       [ 0,  0,  0,  0,  0,  1,  0,  1, -4]], dtype=int8)

为了证明它有效,我用matplotlib绘制了结果并得到了:

plot