我读取了一个 tif 图像(3D 堆栈),其原始尺寸为 100 X 120 X 150(示例)。
但是,当我导入这个时,这个尺寸是 150 X 120 X 100。 我尝试使用matrix.reshape来 reshape 它,但我发现如果我使用这个 reshape ,它的元素顺序将会改变。
import numpy as np
from skimage import io
# read the image stack
fname = '100x120x150.tif'
data = io.imread(fname)
data.shape
我想要做的是更改读取顺序,同时保持元素顺序。因此,导入后,我希望看到 data.shape 为 100X120X150 作为原始尺寸顺序。
最佳答案
尽管np.swapaxes
可能是答案的解决方案,但我建议编写一个显示原始大小信息并保持数据不变的函数。
例如,来自SCIFIO我选择一个 tif 文件(EmbryoCE.zip 中的 focal1.tif,大小为 425 * 434 * 205):
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
fname = 'focal1.tif'
data = io.imread(fname)
np.shape(data) #shows (205, 434, 425)
data[0] # The first layer in original Z direction
plt.imshow(data[0], cmap = "gray", aspect = 'equal')
plt.colorbar()
plt.show()
print('Shape of matrix projection:',np.shape(data[0])) # shows (434, 425)
您可以使用data[切片数量]
轻松绘制 X-Y 平面横截面。
并添加一个显示原始尺寸信息的函数:
def pic_size(data_matrix):
size = print('size of image: (',np.shape(data_matrix)[2],',',np.shape(data_matrix)[1],',',np.shape(data_matrix)[0],')')
return size
pic_size(data) #shows size of image: ( 425 , 434 , 205 )
<小时/>
顺便说一句,reshape 不是一个好主意,它给出的图像带有点,看起来像是周期性排列的,但没有任何有用的信息。
关于python - 我想更改 python 中读取数组的顺序,是否必须使用 reshape?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266845/