所以我有这种形状的ndarray
(39000, 64, 64, 3)
的
dtype=np.uint8
我试图在一个while循环中将所有39k图像转换为灰度
while(image_index<num_images):
gray_dataset = np.dot(dataset[image_index,:,:], [0.299, 0.587, 0.114])
image_index +=1
显然是在生产垃圾。你可以指导我做得好吗?
答案 0 :(得分:1)
如果您想将dataset
中的所有图像转换为浮点灰度格式,同时保留三个通道,您可以这样做:
# (39000, 64, 64, 1)
gray_dataset_1c = np.sum((dataset / 255.) * [0.299, 0.587, 0.114], axis=-1, keepdims=True)
# (39000, 64, 64, 3)
gray_dataset = np.tile(gray_dataset_1c, (1, 1, 1, 3))
或np.dot
:
# (39000, 64, 64)
gray_dataset_1c = np.dot((dataset / 255.), [0.299, 0.587, 0.114])
# Since Python 3.5 this can be written like this:
gray_dataset_1c = (dataset / 255.) @ [0.299, 0.587, 0.114]
# (39000, 64, 64, 3)
gray_dataset = np.tile(gray_dataset_1c[..., np.newaxis], (1, 1, 1, 3))
在快速基准测试之后,似乎np.dot
实际上显然更快。