2017-04-08 164 views
1

我有一個python列表,其中包含90900個nparrays形狀(299, 299, 3)。我想這個列表轉換爲numpy的陣列numpy無法將列表轉換爲np數組

X_trains = np.asarray(X_train).reshape((len(X_train),299,299,3)) 

然而,這給我的錯誤:

ValueError: could not broadcast input array from shape (299,299,3) into shape (299,299)

我想這是導致該錯誤是np.asarray代碼的一部分,是有有什麼辦法解決這個問題?

完整的錯誤代碼:

ValueErrorTraceback (most recent call last) 
<ipython-input-34-2ba5db77f6b1> in <module>() 
    1 
    2 
----> 3 X_trains = np.asarray(X_train) 

/usr/local/lib/python3.4/dist-packages/numpy/core/numeric.py in asarray(a,   dtype, order) 
529 
530  """ 
--> 531  return array(a, dtype, copy=False, order=order) 
532 
533 

ValueError: could not broadcast input array from shape (299,299,3) into shape (299,299) 
+0

我要塑造我的數據爲4維數組(它的圖像文件)(圖像,高度,長度,顏色通道數) – Wideem

+0

@ kmario23你是對的!問題是我沒有意識到有一些灰度圖像,這些圖像混亂了。 – Wideem

+0

好的。很好,你找到了問題! – kmario23

回答

1

沒有,這個問題是因爲reshape()的。 asarray()函數會將您的列表轉換爲適當的Numpy數組,您不需要重新設計它。

下面是一個例子:

In [1]: a = [[1, 2], [4, 5]] 

In [2]: import numpy as np 

In [3]: np.asarray(a) 
Out[3]: 
array([[1, 2], 
     [4, 5]]) 

如果你想還是轉換成numpy的陣列後重塑陣列,新的形狀應該是較舊的陣列廣播到新的足夠正確。

你可以得到的形狀和看它是否轉換爲你的預期之一:

X_trains = np.asarray(X_train) 
old_shape = X_trains.shape 
+0

這個問題很明顯在'np.asarray'中,我包含了完整的錯誤代碼,希望它更有意義 – Wideem

+0

@Wideem這個答案是因爲你的列表包含類似的形狀列表。但是,如果錯誤是因爲asarray,這意味着你的子列表不匹配。 – Kasramvd

0

我明白你的問題。沒有必要重塑它。只是np.asarray會做的工作

X_trains = np.asarray(X_train) 

例子:

In [18]: arr_3d 
Out[18]: 
array([[[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8]], 

     [[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]]]) 


In [19]: list_of_arr = [arr_3d, arr_3d] 

In [20]: arr_4d = np.asarray(list_of_arr) 

In [21]: arr_4d.shape 
Out[21]: (2, 2, 3, 3)