おっぱいそん!

pythonを数値計算に使うときのテクニックとかをまとめていきたい。

2つのarrayが近似的に同じか比べる

2つのNdarrayが近い値かどうかを比べるには、numpy.allcloseを使う。

  • numpy.allclose(a, b, rtol=1e-05, atol=1e-08)

2つのarray a,bを受け取って(a,bは同じshapeのarrayでないといけない)、すべての成分が
absolute(a - b) ≦ (atol + rtol * absolute(b))
を満たせばTrueを、満たさない成分があればFalseを返す。

成分ごとに、比較したい場合はnumpy.iscloseを使う。
また、近い値かどうかではなく、exactに一致しているかどうかを調べたい時には、numpy.array_equalもしくはnumpy.array_equivを使う(numpy.array_equalはshapeが一致している時のみTrueで、numpy.array_equivはbroadcastedして一致するならTrue)。

Ref:
http://ibisforest.org/index.php?python%2Fnumpy#q0f5fdb7
http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html
http://docs.scipy.org/doc/numpy/reference/generated/numpy.isclose.html
http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_equal.html
http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_equiv.html

例)

import numpy as np
A = np.array([1.0, 1.0])
B = np.array([1.0000001, 1.0])
print np.allclose(A,B)
print np.isclose(A,B)
print np.array_equal(A,B)

True
[ True True]
False