Привет у меня есть 1 000 рядов данных с 1 500 точками в каждом.
Они формируются (1000x1500) размер, массив Numpy создал использование np.zeros ((1500, 1000)) и затем заполнился данными.
Теперь, что, если я хочу, чтобы массив вырос для высказывания 1600 x 1100? Я должен добавить массивы с помощью hstack и vstack или существует ли лучший путь?
Я хотел бы, чтобы данные уже в 1000x1500 часть массива не были изменены, только пустые данные (нули), добавленные к нижней части и праву, в основном.
Спасибо.
Если вы хотите, чтобы в добавленных элементах работали нули, my_array.resize((1600, 1000))
. Обратите внимание, что это отличается от numpy.resize(my_array, (1600, 1000))
, в котором предыдущие строки дублируются, что, вероятно, не то, что вы хотите.
В противном случае (например, если вы хотите избежать инициализации элементов до нуля, что может быть ненужным), вы действительно можете использовать hstack
и vstack
для добавления массива, содержащего новые элементы; numpy. concatenate()
(см. pydoc numpy.concatenate) тоже должен работать (насколько я понимаю, он более общий).
В любом случае, я бы предположил, что для расширения массива должен быть выделен новый блок памяти, и что все эти методы занимают примерно одно и то же время.
.Это должно делать то, что вы хотите ( т.е. , используя массив 3x3 и массив 4x4 для представления двух массивов в OP)
>>> import numpy as NP
>>> a = NP.random.randint(0, 10, 9).reshape(3, 3)
>>> a
>>> array([[1, 2, 2],
[7, 0, 7],
[0, 3, 0]])
>>> b = NP.zeros((4, 4))
сопоставление a on to b:
>>> b[:3,:3] = a
>>> b
array([[ 1., 2., 2., 0.],
[ 7., 0., 7., 0.],
[ 0., 3., 0., 0.],
[ 0., 0., 0., 0.]])
В любом случае, вы застрянете, перераспределяя кусок памяти, поэтому не имеет значения, используете ли вы arr.resize ()
, np.concatenate
, hstack / vstack
и т. д. Обратите внимание, что если вы последовательно накапливаете много данных, списки Python обычно более эффективны.
Вы должны использовать reshape () и / или resize () в зависимости от ваших конкретных требований.
Если вам нужны главы и стихи из авторов, которых вам, вероятно, лучше разместить на доске обсуждений.