我需要创建一个图片中所示形式的矩阵,这是一个9x9矩阵,但我想为NxN矩阵创建一个给定值为N的矩阵。
是否可以通过首先定义两个块矩阵来创建它,其中第一个沿对角线重复,第二个重复由1和-1的对角线偏移重复?
这显示了我需要的最终矩阵的图片:
答案 0 :(得分:2)
我创建了一个function
来做你想要的,即使你没有自己尝试,因为我认为这是一个很酷的问题。
function
使用broadcasting
在3x3
上分配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
绘制了结果并得到了: