#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.]]])