[英]Append a numpy.array to a certain numpy.array stored in a list
我已经努力了几个小时,以了解为什么我不能做到这一点:
>>> 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
是具有s个形状为(0,78,3)的空numpy数组的列表
b
是形状为(1,78,3)的随机numpy.array
然后,我尝试将b
附加到a[0]
... ...但是由于尺寸不一而似乎不可行?..我不确定这里的问题是什么..如果我删除列表部分,它将工作,为什么不使用列表?
您没有附加b
而是[b]
。 那不行
因此为了附加b
,使用
a[0] = np.append(a[0],b,axis=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)]
(0,78,3)可以在轴0上与(1,78,3)数组连接,从而生成另一个(1,78,3)数组。
但是为什么呢? 它只是列出了b
2个副本。
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)数组中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.