>>> 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)
>>> np.array([np.zeros((20,200)),np.zeros((20,200)),np.zeros((20,201))])
ValueError: could not broadcast input array from shape (20,200) into shape (20)
from PIL import Image
img = Image.open('my_image.jpg').convert('RGB')
# a line from my program
positive_images_array = np.array([np.array(Image.open(img).convert('RGB').resize((150, 150), Image.ANTIALIAS)) for img in images_in_yes_directory])
>>> a = [np.zeros((10,224)), np.zeros((10,))]
>>> np.array(a)
# this will raise error,
ValueError: could not broadcast input array from shape (10,224) into shape (10)
# but below method works
>>> a = [np.zeros((11,224)), np.zeros((10,))]
>>> b = np.array(a)
>>> b[0] = np.delete(b[0],0,0)
>>> print(b.shape,b[0].shape,b[1].shape)
# print result:(2,) (10,224) (10,)
打印出每一个图像的形状,然后变成这样: ~ 十七〇八年:(五十、五十、三) 十七○九:(五十,五十) 1710年:(50,50) 1711年:(50,50,3) 1712年:(五十、五十、三) 1713年:(50,50,3) ~ 这意味着阅读2个不同的图像文件夹并对其进行混洗后的混合1D和3D数据 img: first one is Grayscale and second one is Color image 添加了cv2.IMREAD_GRAYSCALE,问题得到解决 摘要:在我想转换成np数组的图像数据中包含了不同维度的图像
9条答案
按热度按时间eulz3vhy1#
列表中至少有一个项不是三维的,或者其第二维或第三维与其他元素不匹配。如果只有第一维不匹配,则数组仍然匹配,但作为单独的对象,不会尝试将它们协调到新的(四维)数组中。下面是一些示例:
也就是说,违规元素的
shape != (?, 224, 3)
,或者
ndim != 3
(其中?
是非负整数)。这就是给你错误的东西。
你需要修正这个问题,才能把你的列表变成一个四维(或三维)数组。没有上下文,你不可能说你是想从3D项目中去掉一个维度,还是想在2D项目中增加一个维度(在第一种情况下),或者改变第二个或第三个维度(在第二种情况下)。
以下是错误的示例:
或者,输入类型不同,但错误相同:
或者,类似但具有不同错误消息:
但以下措施将奏效,尽管结果与(大概)预期不同:
2w3rbyxf2#
是的,确实@Evert的答案是完全正确的。另外,我想再添加一个可能遇到这种错误的场景。
这是非常好的。但是,这会导致
ValueError
:列表中的
numpy
数组也必须具有相同的大小。fkaflof63#
您可以使用
astype(object)
将numpy.ndarray
转换为object
这将工作:
neekobn84#
我也面临着同样的问题,因为在我的数据集中,有些图像是灰度图像,所以我通过这样做来解决我的问题
goqiplq25#
@aravk33的答案绝对正确。
我也在经历同样的问题。我有一个2450张图片的数据集。我只是想不通为什么我会面临这个问题。
检查训练数据中所有图像的尺寸。
在将图像追加到列表中时添加以下代码段:
eeq64g8w6#
在我的情况下,问题是在我的数据集,基本上我需要在进一步处理之前对我的数据进行预处理,因为在我的数据集中图像是随机格式,如RGB和灰度,所以维度不匹配。我只是按照Mudasir Habib's的答案。
f5emj3cl7#
这个方法不需要修改dtype或者解开你的numpy数组。
其核心思想是:1.用一个额外行初始化2.将列表(其具有多一行)改变为数组3.删除结果数组中的额外行,例如
的确,不一定非要多加一行,只要能避开@aravk33和@user707650回答中所述差距,稍后删除多出的一项,就可以了。
axr492tv8#
已解决-我遇到了相同的错误:X_test = np.数组(X_test,)值错误:无法将输入数组从形状(50,50,3)广播到形状(50,50)
打印出每一个图像的形状,然后变成这样:
~
十七〇八年:(五十、五十、三)
十七○九:(五十,五十)
1710年:(50,50)
1711年:(50,50,3)
1712年:(五十、五十、三)
1713年:(50,50,3)
~
这意味着阅读2个不同的图像文件夹并对其进行混洗后的混合1D和3D数据
img: first one is Grayscale and second one is Color image
添加了cv2.IMREAD_GRAYSCALE,问题得到解决
摘要:在我想转换成np数组的图像数据中包含了不同维度的图像
w6mmgewl9#
我完全同意@mudassir的回答。如果你已经对你的数据集进行了推断,那么你很可能会得到这个错误。就像大多数的推断一样,它会自动应用灰度效果,实际上是二维的,而原始图片(RGB)是三维的。我自己使用的是roboflow的数据集,它已经被扩充,也有类似的问题。然后我删除了“灰度化步骤”但是它还是给出了错误。但是,一个我删除了灰度,色调和饱和度,它的工作就像一个魅力。我建议你也试试。