2017-12-14 11 views
0

配列内の条件をチェックし、条件が満たされた位置で操作を実行したいと考えています。例えば、コードのこの作品は、仕事を行います。配列内の条件を確認する

res = somefunction(x) 
for i in range(x.shape[0]): 
    for j in range(x.shape[1]): 
     if not 6 < res[i,j] < 18: 
      x[i,j] = float('nan') 

をしかし、私は速い(短い)の方法は、おそらくこのようなものになるだろうと思った:

x[not 6 < somefunction(x) < 18] = float('nan') 

しかし、Pythonは条件がチェックというエラーになります要素以上の配列では機能しません。コードを高速化する方法はありますか?

+0

'のX [〜((6 < x)&(x <18))] = np.nan'はうまくいくでしょうか? –

答えて

1

notまたは配列との連鎖比較は、notも連鎖比較もブロードキャストに実装できないため使用できません。

スプリット2つの比較に連鎖比較、およびnumpyのブール配列にブール演算のためのビット演算子を使用しているため、代わりnotand~&を使用:

x[~((6 < res) & (res < 18))] = numpy.nan 
+0

これは私が投稿したときに見えませんでした。削除されます。 –

+0

また、 'x'はこれが動作するためにはfloatかobjectでなければなりません。 –

関連する問題