2016-06-12 14 views
5

2個以上のnumpy配列をどのように比較すればよいですか?複数のnumpy配列の比較

import numpy 
a = numpy.zeros((512,512,3),dtype=numpy.uint8) 
b = numpy.zeros((512,512,3),dtype=numpy.uint8) 
c = numpy.zeros((512,512,3),dtype=numpy.uint8) 
if (a==b==c).all(): 
    pass 

これはvalueErrorを与え、私は一度に2つの配列を比較することには興味がありません。

+2

"私は一度に2つの配列を比較するのには興味がありません" - あなたが持っている最良の選択肢です。 – user2357112

+0

@ user2357112多くの配列がある場合は簡単ではない –

答えて

4

3つの配列の場合、最初の配列と2番目の配列の間の対応する要素の間で等価性があるかどうかをチェックして2つのブールスカラーを与え、最後に両方のスカラーが最終スカラー出力の場合はTrue、そのように -

np.logical_and((a==b).all(), (b==c).all()) 

配列のより多くの数のために、あなたは、それらを積み重ねスタッキングの軸に沿って分化を取得し、それらの分化のすべてがゼロに等しいかどうかを確認できます。もしそうであれば、すべての入力配列の間に等価性があります。実装はそうのようになります -

L = [a,b,c] # List of input arrays 
out = (np.diff(np.vstack(L).reshape(len(L),-1),axis=0)==0).all() 
+0

reshape(len(L)、 - 1)の必要性はありますが、それがなくてもうまく動作します –

+0

@JayanthReddyいいえ、そうではありません。その軸には、積み上げ軸とマージされた入力配列からの最初の軸が含まれます。ですから、その軸を2つに分割する必要があります。例を明確にするには、 'a = np.random.randint(0,9、(4,5,3));を試してみてください。 b = a.copy(); c = a.copy() 'となります。 – Divakar

3

3の場合の配列を、あなたは本当にただ一度に2を比較する必要があります。配列の可変数のために

if np.array_equal(a, b) and np.array_equal(b, c): 
    do_whatever() 

、のは、彼らがすべての組み合わせだと仮定してみましょう1つの大きな配列arraysに変換します。それで、あなたはできるでしょう

if np.all(arrays[:-1] == arrays[1:]): 
    do_whatever() 
+0

@JayanthReddy:おそらく、あなたは '配列 'にリストを作りました。 – user2357112