【问题标题】:reshape 4D numpy Array of the image is changing the images figures重塑 4D numpy 图像数组正在改变图像数字
【发布时间】:2019-09-18 19:34:18
【问题描述】:

我想将图像的 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()

改造后

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

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

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

r2data = np.transpose(data)
r2data.shape

(128, 100, 100, 50)

【问题讨论】:

  • 我认为您正在寻找docs.scipy.org/doc/numpy/reference/generated/… 整形改变形状但不改变元素的顺序。要交换轴,请使用转置。
  • 亲爱的@tilman151 我试过转置但没有任何改变
  • 您是如何使用该命令的?我建议 data = np.transpose(data, (0, 2, 3, 1))。这应该会将您的频道维度移到后面。
  • @tilman151 结果是 (50, 100, 128, 100)

标签: python numpy multidimensional-array keras reshape


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 2016-05-20
    • 2018-03-17
    • 2020-11-16
    • 2020-12-21
    • 2018-10-16
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多