np转置和压缩无效

时间:2019-04-04 15:20:28

标签: image numpy

我通过

加载(一个)图像
batches =datagen.flow_from_directory(...)

我想绘制一个样本图像,以查看datagnerator的增强效果。

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,))

什么也没发生,前后的形状都一样。

我不知道会发生什么。有人有主意吗?谢谢

1 个答案:

答案 0 :(得分:2)

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

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

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

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

编辑有关转置的用法:

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

在您的情况下,image是一个4维数组(在挤压前进行转置),因此,当您使用transpose调用axis=(2, 1, 3)时,它将引发一个{{1 }}。用4维元组参数调用它可以正常工作。

如果在转置之前进行挤压,则可以使用ValueError作为3维元组来调用转置。