在 Python 中制作 3D 对角矩阵

Making a 3D diagonal matrix in Python

我想创建 3D 对角矩阵。我已经成功地用 numpy 例程创建了一个 numpy.fill_diagonal(numpy.zeros((N, N, N)), n),但是它不允许选择要填充的对角线。

换句话说,我想找到这个 numpy 例程的 3D 泛化:https://numpy.org/doc/stable/reference/generated/numpy.diag.html。谢谢。

好吧,除了使用 np.diag 填充半对角线之外,您还可以像这样手动完成:

N = 4
arr = np.zeros((N, N))
i = np.arange(N-1)
arr[i,i+1] = 1
array([[0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.],
       [0., 0., 0., 0.]])

并且它具有泛化到 3d 数组的优势。

arr = np.zeros((N, N, N))
i = np.arange(N-1)
arr[i,i,i+1] = 1
array([[[0., 1., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 1.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])