2017-05-14 6 views
0

私は3D配列を持っています。配列の範囲は-100.0〜2048.0で、浮動小数点数です。私は、どのような種類のデータを、float/float16/float32 ...をPYTHONで使用するかを決定したいと考えています。現在、float32を使用してアレイ(1000個の3Dアレイ)を保存しており、結果は2GBになります。 float/float16などの別のタイプを使用してサイズを小さくすることはできますか?データの保存にはどのタイプを使用する必要がありますか?

+0

どれだけ精度が良いかによって異なります。 –

+0

どのように配列を保存していますか? –

答えて

2

浮動小数点型についての情報は、numpyのfinfo関数を使用して見つけることができます。下に示すように、float16の最大値は65504.0であるため、値の範囲(-100.0〜2048.0)が適合します。問題は、イプシロン(epsepsneg以下)が大きすぎて、2つの別個の値が同じものとして扱われることがあります。 float32では、イプシロン値はずっと小さく、より高い精度で値を表現することができます。

> import numpy as np 
> print(np.finfo(np.float16)) 
Machine parameters for float16 
--------------------------------------------------------------- 
precision = 3 resolution = 1.00040e-03 
machep = -10 eps =  9.76562e-04 
negep =  -11 epsneg =  4.88281e-04 
minexp = -14 tiny =  6.10352e-05 
maxexp =  16 max =  6.55040e+04 
nexp =  5 min =  -max 
--------------------------------------------------------------- 

> print(np.finfo(np.float32)) 
Machine parameters for float32 
--------------------------------------------------------------- 
precision = 6 resolution = 1.0000000e-06 
machep = -23 eps =  1.1920929e-07 
negep =  -24 epsneg =  5.9604645e-08 
minexp = -126 tiny =  1.1754944e-38 
maxexp = 128 max =  3.4028235e+38 
nexp =  8 min =  -max 
--------------------------------------------------------------- 
関連する問題