繁体   English   中英

将numpy.array附加到存储在列表中的某个numpy.array

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM