我已经花了好几个小时才明白为什么我无法做到这一点:
>>> import numpy as np
>>> a = [np.empty((0,78,3)) for i in range(2)]
>>> b = np.random.randint(10,size=(1,78,3))
>>> a[0] = np.append(a[0],[b],axis=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/numpy/lib/function_base.py", line 5003, in append
return concatenate((arr, values), axis=axis)
ValueError: all the input arrays must have same number of dimensions
>>>
a
是一个带有空的numpy数组形状的列表(0,78,3)
b
是一个随机的numpy.array形状(1,78,3)
然后我尝试将b
追加到a[0]
...但由于没有相同的维度,这似乎不可能吗?..我不知道这里的问题是什么..如果我删除列表部分它会工作,那么为什么不用列表?..
答案 0 :(得分:0)
您不是追加b
而是追加[b]
。这不起作用。
因此,为了追加b
,请使用
a[0] = np.append(a[0],b,axis=0)
答案 1 :(得分:0)
远离np.append
。学习正确使用np.concatenate
。这个追加只会造成混乱。
根据您的定义,这有效:
In [20]: a1 = [np.concatenate((i,b),axis=0) for i in a]
In [21]: [i.shape for i in a1]
Out[21]: [(1, 78, 3), (1, 78, 3)]
In [22]: a
Out[22]:
[array([], shape=(0, 78, 3), dtype=float64),
array([], shape=(0, 78, 3), dtype=float64)]
In [23]: b.shape
Out[23]: (1, 78, 3)
In [24]: a1 = [np.concatenate((i,b),axis=0) for i in a]
In [25]: [i.shape for i in a1]
Out[25]: [(1, 78, 3), (1, 78, 3)]
A(0,78,3)可以在轴0上与(1,78,3)数组连接,产生另一个(1,78,3)数组。
但为什么呢?它只列出了2份b
的副本。
c = [b,b]
这样做也很简单。
如果必须收集许多形状阵列(78,3),请执行
alist = []
for _ in range(n):
alist.append(np.ones((78,3)))
生成的n个数组列表可以转换为带
的数组np.array(alist) # (n, 78, 3) array
或者如果你收集一个(1,78,3)数组的列表,np.concatenate(alist, axis=0)
会将它们加入到(n,78,3)数组中。