Изменение размера матрицы Numpy - PullRequest
0 голосов
/ 27 июня 2018

Скажем, у меня есть следующая матрица:

array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

И я хочу изменить размер этой матрицы на 4 x 4 и заполнить недостающие значения нулями.

Я хочу следующее:

array([[ 1.,  1.,  1.,  0.],
       [ 1.,  1.,  1.,  0.],
       [ 1.,  1.,  1.,  0.],
       [ 0.,  0.,  0.,  0.])

Где моя оригинальная матрица "поддерживается", так сказать. Что на самом деле сделает функция изменения размера numpy, если я вызову ее с помощью .resize ((4,4)), так это:

array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

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

Как мне сохранить все мои данные в «правильных» местах строк при добавлении этих пустых строк и столбцов?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Распределение и заполнение:

In [210]: arr = np.ones((3,3))
In [211]: res = np.zeros((4,4))
In [212]: res[:3,:3] = arr
In [213]: res
Out[213]: 
array([[1., 1., 1., 0.],
       [1., 1., 1., 0.],
       [1., 1., 1., 0.],
       [0., 0., 0., 0.]])

np.pad имеет большую мощность, когда заполнение более сложное, но для чего-то такого простого оно медленнее. Посмотрите на его код, если интересно. Независимо от того, это хорошая идея, чтобы знать и понимать этот простой подход.

0 голосов
/ 28 июня 2018

С numpy.pad рутина:

In [586]: m = np.ones((3,3))

In [587]: np.pad(m, ((0,1), (0,1)), mode='constant')
Out[587]: 
array([[1., 1., 1., 0.],
       [1., 1., 1., 0.],
       [1., 1., 1., 0.],
       [0., 0., 0., 0.]])

Необязательный параметр constant_values, используемый в режиме constant, указывает значения для установки дополненных значений для каждой оси; по умолчанию 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...