Поменять местами оси трехмерного изображения в 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)
Другие вопросы по тегам