Python 如何将整个阵列存储到另一个阵列中

Python 如何将整个阵列存储到另一个阵列中,python,arrays,numpy,Python,Arrays,Numpy,如何将整个阵列存储到另一个阵列中 假设我有一个数组 data = np.array([], dtype=float, ndmin=2) a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) 如何存储这些值,以便 data = [ [1,2,3], [4,5,6] ] 我目前的方法是 data= np.append(data, a) data= np.append(data, b) 但是这会导致[1,2,3,4,6]您的意思是: &

如何将整个阵列存储到另一个阵列中

假设我有一个数组

data = np.array([], dtype=float, ndmin=2)
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
如何存储这些值,以便

data = [ [1,2,3],
         [4,5,6] ]
我目前的方法是

data= np.append(data, a)
data= np.append(data, b)
但是这会导致[1,2,3,4,6]

您的意思是:

>>> data = np.array([a,b])
>>> data
array([[1, 2, 3],
       [4, 5, 6]])
如果您想分步执行,可以使用append,但需要确保所有参数都是秩2(或包装在列表中)。现在,
a
b
都是排名第一的,所以如果您尝试沿特定轴追加,您将得到一个错误。即,您需要做的是:

>>> data = np.empty([0,3]); data
array([], shape=(0, 3), dtype=float64)

>>> data = np.append(data, np.array([a]), axis=0); data
array([[ 1.,  2.,  3.]])

>>> data = np.append(data, np.array([b]), axis=0); data
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.]])


然而,如果
数据中的行数已知(例如,100),那么您最好进行预分配,即将其初始化为
np.empty([100,3])
并按索引填充(例如
数据[0,:]=a

,因此您正在寻找
np.vstack

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
data = np.vstack([a,b])

如果我想执行一个for循环来附加多个数组,该怎么办?我已经编辑了答案,以包含逐步方法。您是否碰巧知道需要预先附加的数组的数量?@Divakar我需要附加1000个大小为70L的数组。然后,您可以初始化数据数组:
data=np.empty((1000,70),dtype=float)
然后在每次迭代时,只需索引和设置元素:
data[i]=a
data[i]=b
等等,其中
i
是迭代器。这应该比迭代追加有效得多。如果我想对多个数组进行for循环追加,该怎么办?首先生成一个列表,然后将该列表连接到一个数组。或者每次执行
data=np.vstack([data,a])
iteration@TasosPapastylianou:比例不太好,因为您每次都必须将所有数据复制到一个新阵列。同意。最好预先分配。但是,尽管如此,以迭代方式生成一个列表并在最后连接也不会有多大的改进。