【发布时间】:2016-09-20 11:35:34
【问题描述】:
我有一个 32x32x3 的图像,例如 keras 中的 cifar10 图像之一。 现在,假设我想做一些操作。首先,为了确保我做的事情是正确的,我试图复制图像(那不是我想做的,所以请不要告诉我如何在不做三个循环的情况下复制图像,我需要三个循环来操作一些值)。
from keras.datasets import cifar10
import matplotlib.pyplot as plt
(X_train, Y_train), (X_test, Y_test) = cifar10.load_data()
im = numpy.reshape(X_train[0], (3, 32, 32))
im = im.transpose(1,2,0)
imC = numpy.zeros((32,32,3))
for k in range(3):
for row in range(0,32):
for col in range(0,32):
imC[row][col][k] = im[row][col][k]
现在,如果我测试它们是否相同,它们实际上是,我看到打印出来的“酷”
if (im==imC).all():
print "cool"
但是当我尝试将它们可视化时,它们是不同的:
plt.imshow( imC )
plt.show()
plt.imshow( im )
plt.show()
发生了什么事?
【问题讨论】:
-
它们有何不同?也许你可以将情节添加到这个问题中
-
这两个数组的元素类型是什么? (
im.dtype,imC.dtype) -
@Gareth,我认为你的想法是正确的,我得到 (im.dtype, imC.dtype) = (uint8, float64)
-
我认为
imshow期望浮点 m×n×3 数组中的 RGB 值归一化为 0..1 范围。如果你这样做plt.imshow(imC/255)会发生什么? -
重点是
imshow显式查看你给它的数组的元素类型,并为uint8和float64做不同的事情。
标签: python numpy matplotlib keras