2016-06-20 17 views
3

に属しているかどうかを確認:numpyのは、配列の要素は、私は2つのnumpyの配列を持っている別の配列

xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5]) 
y = np.array([1.1,1.2]) 

私はxarrの各要素がyに属しているか1.3に等しいかどうかを確認したいです。 、

x = np.where(xarr in y,"y",np.where(xarr == 1.3,"y1","n")) 

が、私は間違った結果を得た:要素がyに属している場合、要素は1.3に等しい場合は、「y」を返す「Y1」を返し、そうでない場合は返す「n」は

は、私はこれを試してみました最初の2つの要素は「n」ではなく「y」にする必要があります。

['n' 'n' 'y1' 'n' 'n'] 

私が間違っていたかどうかわかりません。本当に

+0

NumPy配列では 'in'がひどいです。それが意味をなさないかどうかにかかわらず、 '' x in y''はほぼ文字通り ''(x == y).any() '](http://stackoverflow.com/a/30690604/2357112)です。 – user2357112

答えて

4

あなたが作ることができ、使用numpy.in1dの任意の助けに感謝、残りの部分は非常に単純です:

キーパーツ:

In [25]: np.in1d(xarr, y) 
Out[25]: array([ True, True, False, False, False], dtype=bool) 

全体の例:

In [16]: result = np.empty(len(xarr), dtype=object) 

In [17]: result 
Out[17]: array([None, None, None, None, None], dtype=object) 

In [18]: result.fill("n") 

In [19]: result 
Out[19]: array(['n', 'n', 'n', 'n', 'n'], dtype=object) 

In [20]: result[np.in1d(xarr, y)] = 'y' 

In [21]: result 
Out[21]: array(['y', 'y', 'n', 'n', 'n'], dtype=object) 

In [23]: result[xarr == 1.3] = 'y1' 

In [24]: result 
Out[24]: array(['y', 'y', 'y1', 'n', 'n'], dtype=object) 

編集:

元の試行を少し変更しました:

元の試みで、
In [16]: x = np.where(np.in1d(xarr, y),"y",np.where(xarr == 1.3,"y1","n")) 

In [17]: x 
Out[17]: 
array(['y', 'y', 'y1', 'n', 'n'], 
     dtype='|S2') 

問題はxarr in yがちょうどFalseを与えるということでした。

+0

ありがとうAkavall。可能であれば、私のコードに何が間違っているか教えてください。私はまだかなり混乱しています。 – Square9627

+0

@ Square9627、私は私の答えを更新しました。私はあなたが近いと気づいていませんでした! – Akavall

+0

ありがとうAkavall。 – Square9627

関連する問題