1. ホーム
  2. パイソン

[解決済み】2つのNumPy配列が等しいか、要素ごとに比較する。

2022-03-25 16:43:55

質問

二つの NumPy 配列が等しいかどうかを比較する最も簡単な方法は何ですか(ここで、等しいとは次のように定義されます。A = B iff for all indices i: A[i] == B[i] )?

単純に == は、ブーリアン配列になります。

 >>> numpy.array([1,1,1]) == numpy.array([1,1,1])

array([ True,  True,  True], dtype=bool)

をしなければならないのでしょうか? and それとも、もっと簡単な比較方法があるのでしょうか?

どのように解決するのですか?

(A==B).all()

配列のすべての値(A==B)が真であるかどうかをテストします。

注:A と B の形状もテストしたい場合は、次のようにします。 A.shape == B.shape

特殊なケースと代替案 (dbauppさんの回答、yoavramさんのコメントより)

注意すべきは

  • この解決策は、ある特定のケースで奇妙な動作をすることがあります。 A または B が空で、もう一方が1つの要素を含んでいる場合、その要素は True . なぜか、比較対象が A==B は空の配列を返し、それに対して all 演算子は True .
  • もう一つのリスクは、以下の場合です。 AB が同じ形状を持たず、ブロードキャスト可能でない場合、この方法はエラーを発生させます。

結論として、もしあなたが AB の形状を変更したい場合、または単に安全性を確保したい場合は、特殊な関数を使用します。

np.array_equal(A,B)  # test if same shape, same elements values
np.array_equiv(A,B)  # test if broadcastable shape, same elements values
np.allclose(A,B,...) # test if same shape, elements have close enough values