изменить форму 4D NUMPY Массив изображения меняется изображения рисунков - PullRequest
2 голосов
/ 30 апреля 2019

Я хочу изменить массив изображений 4d с (50, 100, 100, 128) на (50,128, 100, 100), но когда я строю изображение после его изменения, изображение было изменено.Все изображения представляют собой компьютерную томографию 50 пациентов, и я хочу использовать их для нейронной сети Resnet Convolution.Кроме того, у каждого пациента есть 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)

1 Ответ

5 голосов
/ 30 апреля 2019

Используйте 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
...