Если вы сохраните x
как list
, то, если вы просто хотите сохранить форму, добавив, это возможно:
>>> import numpy as np
>>> x = []
>>> y = np.arange(12).reshape(3,4)
>>> x.append(y)
>>> np.shape(x)
(1, 3, 4)
>>> x.append(y)
>>> np.shape(x)
(2, 3, 4)
>>> for i in range(10):
... x.append(y)
>>> np.shape(x)
(12, 3, 4)
Но, учитывая, что вы имеете дело с np.array
s, это может быть вам неудобно сохранять x
как list
, поэтому вы можете попробовать это:
>>> x = np.array(x)
>>> x.shape
(12, 3, 4)
>>> y[None,...].shape
(1, 3, 4)
>>> np.append(x, y[None,...],axis=0).shape
(13, 3, 4)
Слово предостережения: Как указано @ hpaulj :
np.append
следует избегать, поскольку он очень медленный, возможно, только быстрее, чем:
x = np.array([*x, y])
Правильное использование будет:
x = np.concatenate([x, y[None,...]], axis=0)
В любом случае, объединение или добавление - это, как правило, увеличение скорости в numpy
. Поэтому, если вам абсолютно не нужно создавать массив таким образом, вы должны работать со списками. Также большинство функций, примененных к np.arrays
, работают и на list
s. Обратите внимание, что функции применяются к массивам, а не к методам объекта np.array
. Например:
>>> x = list((1, 2, 3, 4))
>>> np.shape(x)
(4,)
>>> x.shape
Traceback (most recent call last):
File "<ipython-input-100-9f2b259887ef>", line 1, in <module>
x.shape
AttributeError: 'list' object has no attribute 'shape'
Поэтому я бы предложил добавить список, а затем, после того как вы закончили добавлять все массивы, преобразовать список в np.array
, если вам требуется.