numpy – 配列同士を比較する関数について

目次

概要

NumPy の配列同士を比較する関数について解説します。

numpy.array_equal

2つの配列が同じ形状と要素を持つ場合は True、そうでない場合は False を返します。

numpy.array_equal(a1, a2)
引数
名前 デフォルト値
a1, a2 array_like
配列を入力します。
返り値
名前 説明
b 配列が等しい場合に True を返します。
In [1]:
import numpy as np

x = np.array([1, 2, 3])
y = np.array([1, 2, 3])
print(np.array_equal(x, y))

x = np.array([1, 2, 3, 4])
y = np.array([1, 2, 3])
print(np.array_equal(x, y))
True
False

numpy.array_equiv

numpy.array_equal() との違いは2つの配列の形状が異なる場合はブロードキャストを試みます。 元の配列の形状が異なっていても、ブロードキャスト後に2つの配列が同じ形状と要素を持つ場合は True になります。 2つの配列が同じ形状と要素を持つ場合は True、そうでない場合は False を返します。

numpy.array_equiv(a1, a2)
引数
名前 デフォルト値
a1, a2 array_like
入力配列。
返り値
名前 説明
out 等しい場合は真、そうでない場合は偽。
In [2]:
x = np.array([1, 2])
y = np.array([[1, 2], [1, 2]])
print(np.array_equal(x, y))
print(np.array_equiv(x, y))
False
True

numpy.equal

要素ごとに == による比較を行い、結果をブール配列で返します。x1 == x2 と同じです。

numpy.equal(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "equal">
引数
名前 デフォルト値
x1, x2 array_like
同じ形状の入力配列。
返り値
名前 説明
out 出力配列、x1x2 の要素ごとの比較。dtype=objectが渡されない限り、通常はbool型です。x1x2 の両方がスカラならば、これはスカラです。
In [3]:
x = np.array([1, 2, 1, 1, 2, 2])
y = np.array([1, 2, 3, 3, 2, 2])
print(np.equal(x, y))

print(x == y)
[ True  True False False  True  True]
[ True  True False False  True  True]

numpy.not_equal

要素ごとに != による比較を行い、結果をブール配列で返します。x1 != x2 と同じです。

numpy.not_equal(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "not_equal">
引数
名前 デフォルト値
x1, x2 array_like
入力配列。
返り値
名前 説明
out x1x2 の要素ごとの比較を出力する配列。dtype=objectが渡されない限り、通常はbool型です。x1x2 の両方がスカラならば、これはスカラです。
In [4]:
x = np.array([1, 2, 1, 1, 2, 2])
y = np.array([1, 2, 3, 3, 2, 2])
print(np.not_equal(x, y))

print(x != y)
[False False  True  True False False]
[False False  True  True False False]

numpy.less

要素ごとに < による比較を行い、結果をブール配列で返します。x1 < x2 と同じです。

numpy.less(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "less">
引数
名前 デフォルト値
x1, x2 array_like
配列を入力します。x1.shape != x2.shapeの場合、それらは共通の形状にブロードキャスト可能でなければなりません(どちらか一方の形状であってもよい)。
返り値
名前 説明
out 出力配列、x1x2 の要素毎の比較。dtype=objectが渡されない限り、通常はbool型。x1x2 の両方がスカラの場合にスカラとなります。

サンプルコード

In [5]:
x = np.array([1, 2, 1, 1, 2, 2])
y = np.array([1, 2, 3, 3, 2, 2])
print(np.less(x, y))

print(x < y)
[False False  True  True False False]
[False False  True  True False False]

numpy.less_equal

要素ごとに <= による比較を行い、結果をブール配列で返します。x1 <= x2 と同じです。

numpy.less_equal(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "less_equal">
引数
名前 デフォルト値
x1, x2 array_like
配列を入力します。x1.shape != x2.shapeの場合、それらは共通の形状にブロードキャスト可能でなければなりません(どちらか一方の形状であってもよい)。
返り値
名前 説明
out 出力配列、x1x2 の要素毎の比較。dtype=objectが渡されない限り、通常はbool型。x1x2 の両方がスカラの場合にスカラとなります。
In [6]:
x = np.array([1, 2, 1, 1, 2, 2])
y = np.array([1, 2, 3, 3, 2, 2])
print(np.less_equal(x, y))

print(x <= y)
[ True  True  True  True  True  True]
[ True  True  True  True  True  True]

numpy.greater

要素ごとに > による比較を行い、結果をブール配列で返します。x1 > x2 と同じです。

numpy.greater(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "greater">
引数
名前 デフォルト値
x1, x2 array_like
配列を入力します。x1.shape != x2.shapeの場合、それらは共通の形状にブロードキャスト可能でなければなりません(どちらか一方の形状であっても構いません)。
返り値
名前 説明
out 出力配列、x1x2 の要素毎の比較。dtype=objectが渡されない限り、通常はbool型。x1x2 の両方がスカラである場合、これはスカラです。

サンプルコード

In [7]:
x = np.array([1, 2, 1, 1, 2, 2])
y = np.array([1, 2, 3, 3, 2, 2])
print(np.greater(x, y))

print(x > y)
[False False False False False False]
[False False False False False False]

numpy.greater_equal

要素ごとに >= による比較を行い、結果をブール配列で返します。x1 >= x2 と同じです。

numpy.greater_equal(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "greater_equal">
引数
名前 デフォルト値
x1, x2 array_like
配列を入力します。x1.shape != x2.shapeの場合、それらは共通の形状にブロードキャスト可能でなければなりません(どちらか一方の形状であっても構いません)。
返り値
名前 説明
out 出力配列、x1x2 の要素毎の比較。dtype=objectが渡されない限り、通常はbool型。x1x2 の両方がスカラである場合、これはスカラです。

サンプルコード

In [8]:
x = np.array([1, 2, 1, 1, 2, 2])
y = np.array([1, 2, 3, 3, 2, 2])
print(np.greater(x, y))

print(x >= y)
[False False False False False False]
[ True  True False False  True  True]

numpy.isclose

要素ごとに2つの値が近いかどうかを比較し、結果をブール配列で返します。浮動小数点演算は丸め誤差が発生するため、==!= を使ってある値と厳密に一致するかどうかの判定は基本的に意図通りには機能しません。 浮動小数点演算の結果がある値に等しいかどうか判定したい場合にこの関数を使用します。

numpy.isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
引数
名前 デフォルト値
a, b array_like
比較する配列を入力します。
rtol float 1e-05
相対的な許容範囲パラメータ(注意事項を参照のこと)。
atol float 1e-08
絶対許容差パラメータ(注意事項を参照してください).
equal_nan bool False
NaNを等しく比較するかどうかを指定します。Trueの場合、a のNaNは出力配列の b のNaNと等しいとみなされます。
返り値
名前 説明
y ab が与えられた許容範囲内で等しい場合のブーリアン配列を返します。ab の両方がスカラ値の場合、単一のブール値を返します。
In [9]:
x = np.array([0.1, 0.2, 0.3])
y = np.array([0.4, 0.5, 0.6])
z1 = x + y

z2 = np.array([0.5, 0.7, 0.9])

print(z1 == z2)
print(np.isclose(z1, z2))
[ True  True False]
[ True  True  True]

numpy.allclose

要素ごとに2つの値が近いかどうかを比較し、すべての値が近い場合は True を返します。浮動小数点演算の結果がある値に等しいかどうか判定したい場合にこの関数を使用します。

numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
引数
名前 デフォルト値
a, b array_like
比較する配列を入力します。
rtol float 1e-05
相対的な許容範囲パラメータ(注釈を参照してください)。
atol float 1e-08
絶対許容差パラメータ(注意事項を参照してください)。
equal_nan bool False
NaNを等しく比較するかどうか。Trueの場合、a のNaNは出力配列の b のNaNと等しいとみなされます。
返り値
名前 説明
allclose 2つの配列が与えられた許容範囲内で等しい場合はTrueを返し、そうでない場合はFalseを返します。
In [10]:
x = np.array([0.1, 0.2, 0.3])
y = np.array([0.4, 0.5, 0.6])
z1 = x + y

z2 = np.array([0.5, 0.7, 0.9])

print(np.all(z1 == z2))
print(np.allclose(z1, z2))
False
True

コメント

コメントする

目次