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