将numpy维度顺序从i,j,k更改为k,i,j

时间:2019-11-06 13:34:07

标签: numpy numpy-ndarray

我需要帮助!

我从nifti 3D图像创建了numpy数组。 由于数据集的维度顺序为x,y,z(i,j,k),因此我需要将其更改为z,x,y(k,i,j)。

Nifti图像尺寸顺序为512x512x508(i,j,k),转换为numpy数组后,我得到了错误的形状,因为它被视为(k,i,j)

因此,我需要翻转尺寸顺序才能获得形状(512,512),而不是形状(512,508)。

我尝试了flip,fliplr,transponse的各种版本,但我认为我什么都没有...

如何正确翻转此数组?

a = np.load("/home/roman/train/processed_data/data_train.npy")
a[0].shape```
gives: 
(512, 508)

1 个答案:

答案 0 :(得分:0)

numpy einsum是一个很好的工具。 正式文件:https://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html

nifti = np.random.randint(0,5,size=(508,512,513)) 
# set the last dim to 513 just to make stuff more clear
nifti.shape
# (508, 512, 513)

nifti_reshape = np.einsum('kij->ijk',nifti)
nifti_reshape.shape
(512, 513, 508)

我认为这是最清晰的读写方式。