重塑4D numpy图像阵列正在改变图像数字

问题描述 投票:2回答:1

我想将图像的4d阵列从(50,100,100,128)更改为(50,128,100,100),但是当我重塑图像后绘制图像时,图像被更改了。所有图像都是来自50名患者的CT扫描图像,我想将它们用于3d Resnet卷积神经网络。此外,每位患者具有128片100×100像素的图像。

原来的形状:

data.shape

(50, 100, 100, 128)

来自数据的图像

imgplot = plt.imshow(data[0,:,:,1])
plt.show()

orginal image

重塑后

rd = data.reshape(-1,128,100,100)
rd.shape

(50, 128, 100, 100)
imgplot = plt.imshow(rd [0,1,:,:])
plt.show()

reshapingimage

此外,我尝试了转置但没有改变

r2data = np.transpose(data)
r2data.shape

(128, 100, 100, 50)
python numpy multidimensional-array keras reshape
1个回答
5
投票

使用具有所需轴顺序的array.transpose()

# original 4D array
In [98]: data = np.random.random_sample((50, 100, 100, 128))

# move last axis to second position; reshapes data but would still be a `view`
In [99]: reshaped_data = data.transpose((0, -1, 1, 2))

In [100]: reshaped_data.shape
Out[100]: (50, 128, 100, 100)

如果你真的想要一个转置后的数据副本,那么你可以强制它这样做:

In [106]: reshaped_data = data.transpose((0, -1, 1, 2)).copy()

In [107]: reshaped_data.flags
Out[107]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
© www.soinside.com 2019 - 2024. All rights reserved.