2011-07-29 11 views
1

2つの配列があり、次のような複雑な条件があります。new_arr<0 and old_arr>0 私は0以外を使用していますが、エラーが発生しています。0以外の関数ヘルプ、Python Numpy

indices = nonzero(new_arr<0 and old_arr>0) 

は、私が試した:私が持っているコードはこれです

indices = nonzero(new_arr<0) and nonzero(old_arr>0) 

しかし、それは私に間違った結果が得られました。

これを回避する手段はありますか?また、2つの非ゼロのステートメントから共通のインデックスを取得する方法があります。例えば、場合:

indices1 = nonzero(new_arr<0) 
    indices2 = nonzero(old_arr>0) 

、これら2つの指標が含まれます

indices1 = array([0, 1, 3]) 
    indices2 = array([2, 3, 4]) 

正しい結果が(この場合には素子3であろう)これらの二つの共通の要素を取得するであろう。このような何か:

result = common(indices1, indices2) 

答えて

5

indices = nonzero((new_arr < 0) & (old_arr > 0))を試してみてください。それがなかったすべてはnonzero(condition)を返した場合

In [5]: import numpy as np 

In [6]: old_arr = np.array([ 0,-1, 0,-1, 1, 1, 0, 1]) 

In [7]: new_arr = np.array([ 1, 1,-1,-1,-1,-1, 1, 1]) 

In [8]: np.nonzero((new_arr < 0) & (old_arr > 0)) 
Out[8]: (array([4, 5]),) 
+0

これはまさに私が探していたものです。 &良い古くからの代わりに&を使って決して私の心に来なかった。ありがとう! –

+0

+1ですが、両方の入力配列が同じ形状である場合にのみ機能します(OPにはそのような前提はありません)。 – Radim

+0

@Radim:そのような前提は言及されていませんが、もしあなたが "共通の指標"について話しているならば、より大きな配列をサイズの小さなものにリサイズすることになります。 – JAB

2

それについて考える(

indices = nonzero(logical_and(new < 0, old > 0)) 

を試してみて、私の以前の例では、すべてのその有用ではありませんでしたとにかく。

+0

私はあなたがcondition.nonzero()で意味することを理解していません –

+0

@theSun:私の答えを修正しました。 – JAB

+0

これもうまくいきました、ありがとう! –

関連する問題