我有一个Python列表,其中包括90900个形状为(299, 299, 3)
的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)
最佳答案
不,问题出在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