2017-04-05 55 views
0

我已经好几个小时strugling明白,为什么我不能够做到这一点:附加一个numpy.array存储在列表中的某个numpy.array

>>> 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)

然后我尝试添加ba[0] ...但这并不似乎有可能因为没有相同的维度?..我不是sur呃这里有什么问题..如果我删除了清单部分,它会工作,所以为什么不与清单?..

+0

只需在追加时从b删除[]。 'a [0] = np.append(a [0],b,axis = 0)' – Kochoba

回答

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))) 

可以变成一个数组

np.array(alist) # (n, 78, 3) array 

所得之正阵列的列表,或者如果你收集(1,78,3)数组列表np.concatenate(alist, axis=0)将把它们连接到(n,78,3)数组中。

0

Your're不追加b[b]。这是行不通的。

所以为了追加b,使用

a[0] = np.append(a[0],b,axis=0)