我有一个python列表,而不是包含形状为(299, 299, 3)
的90900个nparrays。我试图将此列表转换为numpy数组
X_trains = np.asarray(X_train).reshape((len(X_train),299,299,3))
然而,这给了我错误:
ValueError:无法从形状广播输入数组(299,299,3) 成形(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 :(得分: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
答案 1 :(得分: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)