2017-04-05 33 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)