【NumPy】近い値かどうかを判定するisclose[Python]

  • URLをコピーしました!
目次

numpy

前回、数学計算用モジュールmathで色々試してみました。

今回はnumpyで値が近い値かどうかを判定するislcloseを紹介します。

ちなみに前回のmathモジュールでもiscloseが存在し、こんな感じで二つの値が近い値かどうかを判定するものでした。

import math

print(math.isclose(2, 2.1))

実行結果
False

numpyのiscloseも同じように近い値かどうかを判定するのですが、違うのはリスト形式で一度に比較ができるという点です。

それでは始めていきましょう。

numpyのisclose

使い方はmathモジュールのiscloseと同じで「np.isclose(値1, 値2)」です。

import numpy as np

a = 2
b = 2.1

print(np.isclose(a, b))

実行結果
False

値にはnumpyのリストを指定することもできます。

その場合はそれぞれ同じインデックスの要素同士が近い値かどうか判定されます。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([3, 2, 1])

print(np.isclose(a, b))

実行結果
[False  True False]

ちなみにmathモジュールのiscloseではnumpyのリストは使うことはできません。

import math

a = np.array([1, 2, 3])
b = np.array([3, 2, 1])

print(math.isclose(a, b))

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[4], line 6
      3 a = np.array([1, 2, 3])
      4 b = np.array([3, 2, 1])
----> 6 print(math.isclose(a, b))

TypeError: only length-1 arrays can be converted to Python scalars

もう一つおまけにmathモジュールのiscloseでは普通のリストもだめです。

import math

a = [1, 2, 3]
b = [3, 2, 1]

print(math.isclose(a, b))

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[3], line 6
      3 a = [1, 2, 3]
      4 b = [3, 2, 1]
----> 6 print(math.isclose(a, b))

TypeError: must be real number, not list

相対許容差を指定するには「rel_tol」、最小の絶対許容差を指定するには「abs_tol」をオプションに加えます。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([1.1, 2, 3.0000000001])

print(np.isclose(a, b, rtol=0.1))
print(np.isclose(a, b, rtol=0.05))

実行結果
[ True  True  True]
[False  True  True]
import numpy as np

a = np.array([1, 2, 3])
b = np.array([1.1, 2, 3.0000000001])

print(np.isclose(a, b, atol=0.1))
print(np.isclose(a, b, atol=0.05))

実行結果
[ True  True  True]
[False  True  True]

全ての値が近い値かどうかを判定allclose

numpyのiscloseで値にリストを指定した場合、それぞれ同じインデックスの要素が近い値かどうか判定されました。

numpyには実はもう一つ、それぞれ同じインデックスの要素が全て近い値かどうかを判定するallcloseというものがあります。

こちらもでも相対許容差を指定する「rel_tol」、最小の絶対許容差を指定する「abs_tol」が使えます。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([1.1, 2, 3.0000000001])

print(np.allclose(a, b, rtol=0.1))
print(np.allclose(a, b, rtol=0.05))

実行結果
True
False
import numpy as np

a = np.array([1, 2, 3])
b = np.array([1.1, 2, 3.0000000001])

print(np.allclose(a, b, atol=0.1))
print(np.allclose(a, b, atol=0.05))

実行結果
True
False

次回はnumpyで値が同じかどうか、大きいか小さいかを判定する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次