我有一个列表说,temp_list 具有以下属性:
len(temp_list) = 9260
temp_list[0].shape = (224,224,3)
现在,当我转换成 numpy 数组时,
x = np.array(temp_list)
我收到错误:
ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)
有人可以在这里帮助我吗?
最佳答案
列表中至少有一项不是三维的,或者它的第二维或第三维与其他元素不匹配。如果只有第一维不匹配,数组仍然匹配,但作为单独的对象,不会尝试将它们协调为新的(四维)数组。一些例子如下:
也就是说,违规元素的 shape != (?, 224, 3)
,
或 ndim != 3
(其中 ?
是非负整数)。
这就是给你错误的原因。
您需要解决这个问题,以便能够将您的列表变成一个四(或三)维数组。没有上下文,就不可能说是要从 3D 项目中丢失一个维度还是向 2D 项目添加一个维度(在第一种情况下),或者更改第二个或第三个维度(在第二种情况下)。
这是错误的示例:
>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((224,224))]
>>> np.array(a)
ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)
或者,不同类型的输入,但同样的错误:
>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((224,224,13))]
>>> np.array(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)
或者,类似但有不同的错误消息:
>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((224,100,3))]
>>> np.array(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (224,224,3) into shape (224)
但是以下方法会起作用,尽管结果与(大概)预期的结果不同:
>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((10,224,3))]
>>> np.array(a)
# long output omitted
>>> newa = np.array(a)
>>> newa.shape
3 # oops
>>> newa.dtype
dtype('O')
>>> newa[0].shape
(224, 224, 3)
>>> newa[1].shape
(224, 224, 3)
>>> newa[2].shape
(10, 224, 3)
>>>
关于python - ValueError : could not broadcast input array from shape (224, 224,3) 成形状 (224,224),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43977463/