我想更改在python中读取数组的顺序,是否必须使用reshape?

时间:2019-05-23 01:10:16

标签: python arrays numpy reshape

我读取了一张tif图像(3D堆栈),其原始大小为100 X 120 X 150(示例)。

但是,当我导入此文件时,该尺寸为150 X 120 X 100。 我尝试通过使用matrix.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作为原始大小顺序。

1 个答案:

答案 0 :(得分:0)

尽管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)

Image Link

使用data[number of slice]可以轻松绘制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 )

顺便说一句,重塑不是一个好主意,它会给出带有点的图像,这些点看起来似乎是周期性排列的,但是没有任何有用的信息。

Image Link