【发布时间】:2020-08-12 07:11:34
【问题描述】:
目前我有这段代码来显示三个图像:
imshow(image1, title='1')
imshow(image2, title='2')
imshow(image3, title='3')
而且效果很好。但我试图将它们全部放在一行而不是列中。
这是我尝试过的代码:
f = plt.figure()
f.add_subplot(1,3,1)
plt.imshow(image1)
f.add_subplot(1,3,2)
plt.imshow(image2)
f.add_subplot(1,3,3)
plt.imshow(image3)
它抛出
TypeError:无法将 CUDA 张量转换为 numpy。首先使用 Tensor.cpu() 将张量复制到主机内存。
如果我这样做了
f = plt.figure()
f.add_subplot(1,3,1)
plt.imshow(image1.cpu())
f.add_subplot(1,3,2)
plt.imshow(image2.cpu())
f.add_subplot(1,3,3)
plt.imshow(image3.cpu())
它抛出
TypeError:图像数据的形状(1、3、128、128)无效
我应该如何解决这个问题或者有更简单的方法来实现它?
【问题讨论】:
-
使用 Matplotlib 的
subplots函数,通过ncols参数指定你想要的行数。 -
@Lith 我已尝试使用此代码:
fig, axs = plt.subplots(nrows=1, ncols=3) axs[0].imshow(image1.cpu()) axs[1].imshow(image2.cpu()) axs[2].imshow(image3.cpu()),但仍然得到TypeError: Invalid shape (1, 3, 128, 128) for image data -
我不了解 Pytorch,但似乎
cpu()方法正在将具有(我想)维度 (128,128) 的数组image转换为另一个维度 (1,3,128,128) ,对imshow函数无效。该函数的参数必须是一个二维数组(如果使用 RGB 数据,则为 3 维),表示图像像素的数据值。
标签: python python-3.x matplotlib pytorch