我有一个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

10-06 09:50