Python 重塑图像的4D numpy阵列会改变图像的形状

Python 重塑图像的4D numpy阵列会改变图像的形状,python,numpy,multidimensional-array,keras,reshape,Python,Numpy,Multidimensional Array,Keras,Reshape,我想将4d图像阵列从(50、100、100、128)更改为(50128、100、100),但当我在重塑图像后绘制图像时,图像已更改。 所有的图像都是来自50名患者的CT扫描图像,我想将它们用于3d Resnet卷积神经网络。此外,每个患者都有128张100*100像素的图像 原始形状: data.shape (50, 100, 100, 128) 从数据中提取图像 imgplot = plt.imshow(data[0,:,:,1]) plt.show() 整形后 rd=data.res

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

原始形状:

data.shape
(50, 100, 100, 128)
从数据中提取图像

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

整形后

rd=data.restrape(-1128100100)
道路形状
(50, 128, 100, 100)

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

r2data=np.transpose(数据)
r2data.shape
(128, 100, 100, 50)
使用
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

我想你是在寻找改变形状的方法,而不是改变元素的顺序。要交换轴,请使用转置。亲爱的@tilman151我尝试了转置,但没有任何改变。您到底是如何使用该命令的?我建议data=np.transpose(data,(0,2,3,1))。这会将通道尺寸移到后面。@tilman151结果是(50、100、128、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