2016-05-17 8 views
0

私はそれぞれが画像に由来する配列のリストを持っているので、それらは3次元(高さ、幅、チャンネル)です。私はこれらが等しい(r、w、c)点を知る必要があります。numpyの配列のリストが等しい場所を見つける最も速い方法は何ですか?

編集:これまでのところ、私はこれらの画像がどこで違うのかを調べようとしています。それを行うより良い方法があれば、それも良いでしょう。

+0

いくつかの入力と予想される出力で詳しく説明できますか? –

答えて

1

これはあなたがやっていることですか?

(便宜上小)2つの3D「画像」を定義します。

In [417]: img1=np.zeros((4,5,3),int); img2=np.zeros((4,5,3),int) 

In [418]: img1[1:3,1:4,:]=[1,0,2] # different 'color' in the middle  
In [419]: img2[1:3,1:4,:]=[2,1,0] 

In [421]: img1!=img2 
Out[421]: 
array([[[False, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False]], 

     [[False, False, False], 
     [ True, True, True], 
     ..., 
     [False, False, False]]], dtype=bool) 

私たちは色ではない、彼らは異なるポイントでちょうど興味がある、とした場合、我々はallany(I'LLを適用することができます)あなたはそれを整理してみましょう:

In [422]: (img1!=img2).all(axis=2) 
Out[422]: 
array([[False, False, False, False, False], 
     [False, True, True, True, False], 
     [False, True, True, True, False], 
     [False, False, False, False, False]], dtype=bool) 

およびそれらの点のインデックスを見つけるために、where(またはnonzero)を使用します。私たちは「スタック」してできた複数の画像については

In [423]: np.where((img1!=img2).all(axis=2)) 
Out[423]: 
(array([1, 1, 1, 2, 2, 2], dtype=int32), 
array([1, 2, 3, 1, 2, 3], dtype=int32)) 

、と平等の同じ種類を行う、私はあなたが複数のディメンション間で比較を行うことができるかに焦点を当てています

再び
In [429]: imgs=np.array([img1,img2]) # 4d (2, 4, 5, 3) 

In [430]: (imgs==imgs[0,...]).all(axis=0).all(axis=-1) 
Out[430]: 
array([[ True, True, True, True, True], 
     [ True, False, False, False, True], 
     [ True, False, False, False, True], 
     [ True, True, True, True, True]], dtype=bool) 

をテストします。

関連する問題