2016-12-04 21 views
1

私はPythonの初心者です。ここに私の問題があります。私はこれを実行すると2つの高次元numpy配列間の相互要素を見つける

import numpy as np 

def neighbors(indexset, i,j): 
    temp = np.array([[i-1,j],[i+1,j],[i,j-1],[i,j+1]]) 
    for ele in temp: 
     if ele in indexset: 
      print(ele) 

indexset = np.array([[0,1],[1,1],[2,1],[3,1]]) 
neighbors(indexset, 0,0) 

私は

neighbors(indexset, 0,0) 
[1 0] 
[ 0 -1] 
[0 1] 

私が間違って何をやっているを理解していない値を取得しますか?なぜこれは[0,1]しか返しませんか?

+0

? – Divakar

+0

目標は、tempとindexsetの共有要素を見つけることです – kevinkayaks

答えて

2

ele in tempは、eleがスカラーの場合にのみ適切な結果を得ていると思います。これはnumpy関数__contains__を使用します。これは(a==b).any()に相当します。あなたはPythonのリストの代わりに、numpyの配列でこれを行う場合は、それが動作します:予想通り

def neighbors(indexset, i,j): 
    temp = [[i-1,j],[i+1,j],[i,j-1],[i,j+1]] 
    for ele in temp: 
     if ele in indexset: 
      print(ele) 

indexset = [[0,1],[1,1],[2,1],[3,1]] 
neighbors(indexset, 0,0) 

[0,1]を印刷します。 indexsetは常にnumpyの配列である場合は、tolistを使用することができます。

サンプル中の上位2次元numpyの配列です
import numpy as np 

def neighbors(indexset, i,j): 
    temp = [[i-1,j],[i+1,j],[i,j-1],[i,j+1]] 
    for ele in temp: 
     if ele in indexset.tolist(): 
      print(ele) 

indexset = np.array([[0,1],[1,1],[2,1],[3,1]]) 
neighbors(indexset, 0,0) 
+0

ありがとう!私はコードがリストに作用するのを見る。しかし、私はindexsetがnumpy配列である必要があると思います。 tolistで提案されているリビジョンはうまくいきません。 ValueError:複数の要素を持つ配列の真理値はあいまいです。 a.any()またはa.all()を使用します。 'in'を使用するのとは異なるアプローチが必要だと思います。 – kevinkayaks

+0

リスト専用の実装と同じ出力が得られます。あなたは私の答えの2番目の部分に書いたものを正確に使ったのですか? 'temp'もリストでなければならないので、それは私の関数の中にあります。おそらく、 'tolist'アプローチのあなたのバージョンでは、' temp'を数値配列として残したでしょうか? –

+0

はい、私はあなたの 'ValueError'をレプリケートするには、' temp'を 'neighbours'関数でnumpy配列にし、' indexset'に 'tolist'だけを使用してください。 temp = np.array([[i-1、j]、[i + 1、j]、[i、j-1]、[i、j + 1] 'tolist'を使っている' neighbours'のあなたのバージョンでは、[i-1、j]、[i + 1、j]、[i、j-1]、[i、j + 1]] ' –

関連する問題