Супердиагональная неквадратная матрица в NumPy? - PullRequest
2 голосов
/ 04 апреля 2019

Используя 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 Ответ

1 голос
/ 04 апреля 2019

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.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...