如何制作一个在对角线上有位移的冠层对角矩阵?
How to make a diagonal matrix with canopy that has a displacement in the diagonal?
我需要创建一个对角线从中心向左或向右移动的对角矩阵,有什么帮助吗?
正如你的问题的反对票所暗示的那样,你应该尝试以更好的方式解释你的问题。话虽如此,我最好的猜测是您正在寻找超对角线和次对角线矩阵;即:
上对角线:
0 1 0 0
0 0 1 0
0 0 0 1
0 0 0 0
次对角线:
0 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0
如果是这样,那么你可以使用 Numpy 的 indices
:
import numpy as np
superdiagonal = np.zeros((4, 4))
i, j = np.indices(superdiagonal.shape)
superdiagonal[i == j-1] = 1
print(superdiagonal)
这会给你:
array([[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.],
[ 0., 0., 0., 0.]])
对于下对角线,您只需将 i == j-1
部分更改为 i == j+1
。
我需要创建一个对角线从中心向左或向右移动的对角矩阵,有什么帮助吗?
正如你的问题的反对票所暗示的那样,你应该尝试以更好的方式解释你的问题。话虽如此,我最好的猜测是您正在寻找超对角线和次对角线矩阵;即:
上对角线:
0 1 0 0
0 0 1 0
0 0 0 1
0 0 0 0
次对角线:
0 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0
如果是这样,那么你可以使用 Numpy 的 indices
:
import numpy as np
superdiagonal = np.zeros((4, 4))
i, j = np.indices(superdiagonal.shape)
superdiagonal[i == j-1] = 1
print(superdiagonal)
这会给你:
array([[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.],
[ 0., 0., 0., 0.]])
对于下对角线,您只需将 i == j-1
部分更改为 i == j+1
。