目前我有这段代码来显示三张图片:
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)
出现错误:
类型错误:无法将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())
出现错误:
类型错误:图像数据的形状无效(1, 3, 128, 128)
如何修复此问题,或者是否有更简便的实现方法?
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
的错误提示。 - Hekes Pekescpu()
方法正在将数组image
转换为另一个维度为(1,3,128,128)的数组(我猜测原数组维度为(128,128)),这对于imshow
函数是无效的。该函数的参数必须是一个二维数组(如果您使用RGB数据,则为三维数组),表示图像像素的数据值。 - Lith