为什么matplotlib imshow通过改变数组的顺序显示不同的图像?
Why matplotlib imshow shows different images by changing the order of the array?
我有一个测试用例,重塑数组会改变 plt.imshow
:
的结果
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
file_raw_path = "8258792/Fig5_ColorfulCell_raw.tif"
im = io.imread(file_raw_path)
im= np.max(im, axis=0)
im_reshaped = im.reshape((im.shape[1],im.shape[2],im.shape[0]))
for i in range(im.shape[0]):
plt.imshow(im[i],cmap='gray')
plt.show()
for i in range(im_reshaped.shape[2]):
plt.imshow(im_reshaped[...,i],cmap='gray')
plt.show()
第一个循环显示这些图像:
并且第二个循环显示此图像(当然是同一件事的 5 次...):
知道为什么会这样吗?!
np.reshape()
不移动任何数据;它只是改变轴“环绕”的位置。您可以将其视为首先展平输入数组,然后将数据包裹在轴上以适应新形状。
>>> arr = np.arange(6).reshape(2, 3)
array([[0, 1, 2],
[3, 4, 5]])
>>> arr.reshape(3, 2)
array([[0, 1],
[2, 3],
[4, 5]])
>>> arr.
如果您阅读 left-to-right、top-to-bottom,所有数字的顺序相同。
你可能想要 np.transpose()
和朋友,它们(本质上)打乱数据以改变坐标轴的顺序,这样 im[i, j, k] == im.transpose(1, 2, 0)[j, k, i]
(注意,它实际上并没有移动任何数据,看起来就是那样)。对于您的用例,np.moveaxis(im, 0, -1)
会做同样的事情,并且更容易阅读(“将轴 0 移到最后”)。
>>> arr.transpose(1, 0)
array([[0, 3],
[1, 4],
[2, 5]])
我有一个测试用例,重塑数组会改变 plt.imshow
:
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
file_raw_path = "8258792/Fig5_ColorfulCell_raw.tif"
im = io.imread(file_raw_path)
im= np.max(im, axis=0)
im_reshaped = im.reshape((im.shape[1],im.shape[2],im.shape[0]))
for i in range(im.shape[0]):
plt.imshow(im[i],cmap='gray')
plt.show()
for i in range(im_reshaped.shape[2]):
plt.imshow(im_reshaped[...,i],cmap='gray')
plt.show()
第一个循环显示这些图像:
并且第二个循环显示此图像(当然是同一件事的 5 次...):
知道为什么会这样吗?!
np.reshape()
不移动任何数据;它只是改变轴“环绕”的位置。您可以将其视为首先展平输入数组,然后将数据包裹在轴上以适应新形状。
>>> arr = np.arange(6).reshape(2, 3)
array([[0, 1, 2],
[3, 4, 5]])
>>> arr.reshape(3, 2)
array([[0, 1],
[2, 3],
[4, 5]])
>>> arr.
如果您阅读 left-to-right、top-to-bottom,所有数字的顺序相同。
你可能想要 np.transpose()
和朋友,它们(本质上)打乱数据以改变坐标轴的顺序,这样 im[i, j, k] == im.transpose(1, 2, 0)[j, k, i]
(注意,它实际上并没有移动任何数据,看起来就是那样)。对于您的用例,np.moveaxis(im, 0, -1)
会做同样的事情,并且更容易阅读(“将轴 0 移到最后”)。
>>> arr.transpose(1, 0)
array([[0, 3],
[1, 4],
[2, 5]])