Matplotlib imshow在使用astype(浮点)后反转颜色

Matplotlib imshow在使用astype(浮点)后反转颜色,matplotlib,Matplotlib,我正在使用matplotlibimshow来可视化来自cifar-10的数据。在读取cifar10数据后,我注意到从imshow渲染的图像在使用.astype(float)后有所不同 比如说, 没有.astype(float) 下面是我看到的.astype(float) 为什么图像看起来像是使用反转的颜色进行渲染 以下是我正在使用的代码: dir = 'resources/datasets/cifar-10-batches-py' import cPickle fo = open(dir +

我正在使用matplotlib
imshow
来可视化来自cifar-10的数据。在读取cifar10数据后,我注意到从
imshow
渲染的图像在使用
.astype(float)
后有所不同

比如说,

没有
.astype(float)

下面是我看到的
.astype(float)

为什么图像看起来像是使用反转的颜色进行渲染

以下是我正在使用的代码:

dir = 'resources/datasets/cifar-10-batches-py'
import cPickle
fo = open(dir + '/data_batch_1', 'rb')
dict = cPickle.load(fo)
fo.close()
X=dict['data'].reshape((10000, 3, 32, 32)).transpose(0, 2, 3, 1).astype(float)
Y=dict['labels']
plt.imshow(X[2,])
plt.show()

有点晚,但对于寻求帮助并找到此帖子的人:

本文很好地解释了matplotlib如何决定颜色映射

我刚刚遇到了同样的问题,并在这篇文章中找到了解决办法。matplotlib似乎假设float类型的3d图像在[0,1]范围内,并使用1的模运算来钳制值,如2.7->0.7

试试这个:

X=dict['data'].reshape((10000, 3, 32, 32)).transpose(0, 2, 3,1)

X = X.astype(float) / 255    
plt.imshow(X[2,])
现在matplotlib应该直接使用提供的值,而不是使用内部模魔术