gpt4 book ai didi

numpy - 在 Numpy 和 Nibabel 中更改数据类型

转载 作者:行者123 更新时间:2023-12-03 20:48:18 26 4
gpt4 key购买 nike

我正在尝试使用 Nibabel 将 numpy 数组转换为 Nifti 文件格式。我的一些 Numpy 数组有 dtype('<i8')什么时候应该是dtype('uint8')当 Nibabel 调用数据类型时。

arr.get_data_dtype()

有谁知道如何转换和保存 Numpy 数组的数据类型?

最佳答案

标题的问题与正文中的问题略有不同。所以...

如果要更改 numpy 数组的数据类型 arrnp.int8 , 您正在寻找 arr.astype(np.int8) .

请注意,您可能会因数据转换而失去精度(请参阅 astype 文档)

要在之后保存它,您可能需要查看 ?np.save?np.savetxt (或检查库 pickle ,以保存比 numpy 数组更通用的对象)。

如果要更改保存在 my_image.nii.gz 中的 nifti 图像的数据类型
你必须去:

import nibabel as nib
import numpy as np

image = nib.load('my_image.nii.gz')

# to be extra sure of not overwriting data:
new_data = np.copy(image.get_data())
hd = image.header

# in case you want to remove nan:
new_data = np.nan_to_num(new_data)

# update data type:
new_dtype = np.int8 # for example to cast to int8.
new_data = new_data.astype(new_dtype)
image.set_data_dtype(new_dtype)

# if nifty1
if hd['sizeof_hdr'] == 348:
new_image = nib.Nifti1Image(new_data, image.affine, header=hd)
# if nifty2
elif hd['sizeof_hdr'] == 540:
new_image = nib.Nifti2Image(new_data, image.affine, header=hd)
else:
raise IOError('Input image header problem')

nib.save(new_image, 'my_image_new_datatype.nii.gz')

最后,如果你有一个 numpy 数组 my_arr并且您想将其保存到具有给定数据类型 np.my_dtype 的 nifti 图像中, 你可以做:
import nibabel as nib
import numpy as np

new_image = nib.Nifti1Image(my_arr, np.eye(4))
new_image.set_data_dtype(np.my_dtype)

nib.save(new_image, 'my_arr.nii.gz')

希望能帮助到你!

注意:如果您使用 ITKsnap,您可能需要使用 np.float32 , np.float64 , np.uint16 , np.uint8 , np.int16 , np.int8 .其他选择可能无法生成可以使用此软件打开的图像。

关于numpy - 在 Numpy 和 Nibabel 中更改数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44397617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com