Numpy无法将列表转换为np数组

时间:2017-04-08 12:59:21

标签: python arrays list python-3.x numpy

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

2 个答案:

答案 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)