Создание 3D-диагональной матрицы в Python

#python #numpy #matrix #multidimensional-array #diagonal

Вопрос:

Я хотел бы создать 3D диагональные матрицы. Мне уже удалось создать его с помощью процедуры numpy numpy.fill_diagonal(numpy.zeros((N, N, N)), n) , однако она не позволяет выбрать диагональ для заполнения.

Другими словами, я хотел бы найти 3D-обобщение этой рутины numpy : https://numpy.org/doc/stable/reference/generated/numpy.diag.html. Спасибо.

Ответ №1:

Ну, вместо того, чтобы использовать 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.]]])