Поменять местами оси трехмерного изображения в nilearn / numpy - PullRequest
1 голос
/ 05 мая 2020

Я работаю с некоторыми данными нейровизуализации, и мои размеры для сканирования (100, 150, 100). В настоящее время я работаю с файлом в формате нибабеля.

Есть хороший способ поменять местами оси? Например, я хочу, чтобы мое изображение было (100, 100, 150). Я бы предпочел, чтобы это было в формате nibabel, но при необходимости я могу получить изображение в numpy ndarray, а затем выполнить работу и там. В этом случае, есть ли хороший способ сделать это в numpy?

Спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

Если вы используете numpy, используйте:

import numpy as np

arr = np.swapaxes(arr, 1, 2)

Это поменяет местами оси 1 и 2 (которые являются 2-м и 3-м измерением с размером 150 и 100 соответственно).

Пример код:

arr = np.zeros((100,150,100))
arr = np.swapaxes(arr, 1, 2)
print(arr.shape)

вывод:

(100, 100, 150)
0 голосов
/ 05 мая 2020

Вы можете использовать numpy.swapaxes, как указано в ответе Эхсана, который меняет местами две оси. Вы также можете использовать numpy.transpose, что позволяет вам изменять две или более оси в любом желаемом порядке. Например:

>>> import numpy as np
>>> data = np.empty((4, 5, 6))
>>> data.shape
(4, 5, 6)
>>> np.transpose(data, axes=(1, 2, 0)).shape
(5, 6, 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...