首页 > 解决方案 > np转置和挤压没有效果

问题描述

我通过加载(一个)图像

batches =datagen.flow_from_directory(...)

我想绘制一个示例图像以查看数据生成器的增强。

display(img_batch[0].shape)

给我看 (1, 256, 256, 3)

然后我转置

image = img_batch[i].transpose((2,1,3,0))

这里发生了第一个“错误”。通常我会转置为

image = img_batch[i].transpose((2,1,3))

但后来我得到一个错误

ValueError:轴与数组不匹配

所以我如图所示转置并得到

(256, 256, 3, 1)

所以我认为, np.squeez 可以解决这个问题,但是当我使用任何变体时

np.squeeze(image,(3,))

只是没有任何反应,显示前后的形状相同。

我不知道会发生什么。有人有想法吗?谢谢

标签: imagenumpy

解决方案


您需要将输出分配给np.squeeze(image,(3,))变量,它不会对变量进行就地更改。

image = np.squeeze(image,(3,))

然后image.shape将返回(256, 256, 3)

作为旁注,您可以在squeeze不指定axis您的情况下调用,因为该函数默认情况下会删除长度为 1 的维度。

编辑关于转置的使用:

在 numpy 中,该transpose函数期望axis是与您转置的数组的维数相同维度的元组。

在您的情况下image是一个 4 维数组(当您在挤压它之前对其进行转置),因此,当您调用它transposeaxis=(2, 1, 3)会引发一个ValueError. 使用 4 维元组参数调用它可以按预期工作。

如果在转置之前进行挤压,则可以将转置axis称为 3 维元组。


推荐阅读