Nibabelを使用してnumpy配列をNiftiファイル形式に変換しようとしています。 Numpy配列の中にはdtype('<i8')
があり、Nibabelがデータ型を呼び出すときにはdtype('uint8')
になるはずです。NumpyとNibabelでデータ型を変更
arr.get_data_dtype()
Numpyアレイのデータ型を変換して保存する方法を知っている人はいますか?
Nibabelを使用してnumpy配列をNiftiファイル形式に変換しようとしています。 Numpy配列の中にはdtype('<i8')
があり、Nibabelがデータ型を呼び出すときにはdtype('uint8')
になるはずです。NumpyとNibabelでデータ型を変更
arr.get_data_dtype()
Numpyアレイのデータ型を変換して保存する方法を知っている人はいますか?
タイトルの質問は本文の質問と多少異なります。あなたはnp.int8
にnumpyの配列arr
のデータ型を変更したい場合はそう...
は、あなたがarr.astype(np.int8)
を探しています。あなたはキャストによるデータの精度を失う可能性が
マインドは、あなたが見たいと思っても、後でそれを保存するには
を(astypeマニュアルを参照してください)?np.save
と?np.savetxt
(または、ライブラリpickle
をチェックするnumpyのより多くの一般的なオブジェクトを保存しますアレイ)。
あなたがのために行く必要がmy_image.nii.gz
に保存されてnifti画像のデータ型に変更する場合:あなたがnumpyの配列my_arr
を持っている場合、最後に
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')
とあなたを指定されたデータタイプ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
を使用することもできます。他の選択肢では、このソフトウェアで開くことができる画像が生成されないことがあります。
''
hpaulj
元の配列のデータ型はint64ですが、Nibabelにロードすると 'に変更されます。arr = nib.Nifti1Image(np_arr、np.eye(4))' –
Char
'np.ones(3、 '
hpaulj