2つのNumPy配列の等価性を要素ごとに比較する 質問する

2つのNumPy配列の等価性を要素ごとに比較する 質問する

2 つの NumPy 配列が等しいかどうかを比較する最も簡単な方法は何ですか (等価性は次のように定義されます: すべてのインデックス i: に対して A = B の場合に限りますA[i] == B[i])?

単に使用すると==ブール配列が得られます:

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

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

and配列が等しいかどうかを判断するには、この配列の要素を比較する必要がありますか、それとももっと簡単な方法がありますか?

ベストアンサー1

(A==B).all()

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

注: 次のようなAとBの形状もテストしたい場合があります。A.shape == B.shape

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

注意すべきこと:

  • このソリューションは、特定のケースで奇妙な動作をすることがあります。 または のいずれかAB空で、もう一方に要素が 1 つだけ含まれている場合、 を返しますTrue。何らかの理由で、比較によってA==B空の配列が返され、その場合、all演算子は を返しますTrue
  • もう 1 つのリスクは、Aと がB同じ形状ではなく、ブロードキャスト可能でない場合、このアプローチではエラーが発生することです。

A結論として、形状について疑問がある場合、Bまたは単に安全を確保したい場合は、次のいずれかの専用関数を使用してください。

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

おすすめ記事