主に、それはあなたをだましていますnumpyの配列のちょうどrepr
です。
の上にあなたの例を考えてみましょう:だから最初の要素は、実際にゼロではない、それはそのように見せてnumpyの配列のちょうどプリティプリントだ
[ 1. 0.99999 ]
0.99999999999
False
:
import numpy as np
x = float(1) - np.array([1e-10, 1e-5])
print x
print x[0]
print x[0] == 1.0
この利回りを。これはもちろんnumpy.set_printoptions
.
によって制御することができる
、numpyのはfundementally限られた精度の浮動小数点数を使用しています。 numpyの全体的な点は、同様のデータの配列のメモリ効率の良いコンテナになるため、numpyにはdecimal
クラスに相当するものはありません。
しかし、64ビット浮動小数点精度はまともな精度を持っています。あなたは1e-10と1e-5であまりにも多くの問題を打つことはありません。必要に応じて、numpy.float128
dtypeもありますが、ネイティブ浮動小数点を使用するよりも操作が非常に遅くなります。
私は、1の累乗に小さな数字を上げ、0に丸めて同じ問題を抱えています。 – mike
あなたにはダウンボントがあります...それは良い質問です、i.m.o. –