2016-09-19 7 views
0

私はnumpy.float32型の値を持ち、numpyの配列はdtype="float32"です。numpy配列の浮動小数点精度は要素と異なります

個々の配列要素参照を使用して直接値の表現を出力するとき、配列オブジェクト自体の表現を出力する場合と比べて精度が異なります。

次の計算もビットオフであるため、後者の値は、連続的なベクトル/行列の人工的に使用される値のようです。

なぜ違いがあり、これらの精度 "異常"を手動で処理する必要があるのですか?

>>> a = math.pi/2 

>>> a 
1.5707963267948966 

>>> elementx = numpy.float32(math.cos(a)) 

>>> arrayx = numpy.array([elementx], dtype="float32") 

>>> elementx 
6.1232343e-17 

>>> arrayx 
array([ 6.12323426e-17], dtype=float32) 

>>> t = numpy.float32(3.0) 

>>> t * elementx 
1.8369703e-16 

>>> t * arrayx 
array([ 1.83697028e-16], dtype=float32) 

(Pythonの3.5.2、GCC 5.4.0、Linuxの4.4.0-21-ジェネリック)

答えて

2

これらの文字列表現でだけ違いがあり、値が同じであると計算がオフではありません。でも

>>> (t * elementx) == (t * arrayx)[0] 
True 
+0

: '(のt *のelementx)==(T * arrayx)' => 'の配列([真]、DTYPE =ブール値) '....実際に私の質問:)のおかげでした。 – lash

関連する問題