在 nilearn/numpy 中交换 3D 图像的轴
Swap axes of a 3D image in nilearn/numpy
我正在处理一些神经成像数据,我的扫描维度是 (100, 150, 100)。我目前正在使用 nibabel 格式的文件。
有什么好的方法可以交换坐标轴吗?例如,我希望我的图像是 (100, 100, 150)。我更希望以 nibabel 格式使用它,但如果需要,我可以将图像获取到 numpy ndarray,然后也在那里进行工作。在这种情况下,在 numpy 中有没有好的方法来做到这一点?
感谢您的帮助!
如果您使用的是 numpy,请使用:
import numpy as np
arr = np.swapaxes(arr, 1, 2)
这将交换轴 1 和轴 2(分别是尺寸为 150 和 100 的第二维和第三维)。
示例代码:
arr = np.zeros((100,150,100))
arr = np.swapaxes(arr, 1, 2)
print(arr.shape)
输出:
(100, 100, 150)
您可以使用 Ehsan 的回答中提到的 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)
我正在处理一些神经成像数据,我的扫描维度是 (100, 150, 100)。我目前正在使用 nibabel 格式的文件。
有什么好的方法可以交换坐标轴吗?例如,我希望我的图像是 (100, 100, 150)。我更希望以 nibabel 格式使用它,但如果需要,我可以将图像获取到 numpy ndarray,然后也在那里进行工作。在这种情况下,在 numpy 中有没有好的方法来做到这一点?
感谢您的帮助!
如果您使用的是 numpy,请使用:
import numpy as np
arr = np.swapaxes(arr, 1, 2)
这将交换轴 1 和轴 2(分别是尺寸为 150 和 100 的第二维和第三维)。
示例代码:
arr = np.zeros((100,150,100))
arr = np.swapaxes(arr, 1, 2)
print(arr.shape)
输出:
(100, 100, 150)
您可以使用 Ehsan 的回答中提到的 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)