увеличить размер np.ndarray

#python #numpy

#python #numpy

Вопрос:

Я хочу увеличить размер ndarray следующим образом:

 from r = [[1 2]
          [3 4]] 

to r = [[1 2 0]
        [3 4 0]
        [0 0 0]]
  

если я использую r.resize((3, 3), refcheck=False), я получаю:

 [[1 2 3]
 [4 0 0]
 [0 0 0]]
  

Ответ №1:

Используйте pad функцию NumPy:

 import numpy as np
np.pad(r,(0,1))
  

Это заполнит нули r с размером заполнения 1 в конце строк и столбцов и не будет заполняться в начале (так как мы установили там 0 для размера заполнения).

Ответ №2:

Вы просто можете определить новый nparray и сопоставить с ним старый:

 x = np.array([[1, 2], [3, 4]])

reshaped_array = np.zeros((3, 3))
reshaped_array[:2, :2] = x
  

вывод:

 array([[1., 2., 0.],
       [3., 4., 0.],
       [0., 0., 0.]])
  

Комментарии:

1. Также выполнимо. Обратите внимание, что это решение предполагает создание другого массива в памяти, что приведет к накладным расходам. Для небольших массивов это решение должно быть в порядке.

2. Это правда @GilPinsky. Я предполагаю, что это будет небольшой массив. для больших массивов это неэффективно.

3. @Gil, так же как и ваше использование pad . Учитывая желаемую компоновку данных, нет опции на месте. Посмотрите на x.ravel() — до и после заполнения, чтобы понять, почему.

4. @Gil, какие оптимизации pad делают? Последний раз, когда я смотрел, это был чистый код Python.