Супердиагональная неквадратная матрица в numpy?

#python #numpy #matrix

#python #numpy #матрица

Вопрос:

Используя numpy, я хочу создать супердиагональную матрицу, которая является только почти квадратной. Она имеет дополнительные нули справа или слева от квадратной части. Приведенный ниже фрагмент кода дает мне желаемый результат, но его немного сложно прочитать, и тип матрицы кажется мне достаточно распространенным, чтобы существовал идиоматический способ его построения.

Какой самый простой способ создать «дополненные глаза», как показано ниже, в numpy?

 import numpy as np
size = 5
pad_width = 3
left_padded_eye = np.block([np.zeros((size,pad_width)),np.eye(size)])
right_padded_eye = np.block([np.eye(size),np.zeros((size,pad_width))])
  

Ответ №1:

np.eye можно ли сделать это напрямую

 >>> np.eye(size, size pad_width, pad_width)
array([[0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1.]])
>>> np.eye(size, size pad_width)
array([[1., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0., 0.]])