Поменять местами оси трехмерного изображения в nilearn/numpy
Я работаю с некоторыми данными нейровизуализации, и мои размеры для сканирования (100, 150, 100). В настоящее время я работаю с файлом в формате nibabel.
Есть ли хороший способ поменять оси местами? Например, я хочу, чтобы мое изображение было (100, 100, 150). Я бы предпочел, чтобы это было в формате nibabel, но при необходимости я могу получить изображение в numpy ndarray, а затем выполнить работу и там. В этом случае, есть ли хороший способ сделать это в numpy?
Спасибо вам за помощь!
2 ответа
Если вы используете 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)
Вы можете использовать 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)