2017-07-07 50 views
2

numpyの配列が与えられているので、不等式に基づいてその値を置き換えたいと思います。だから私はしたいたとえば、私は0と0よりも小さい値を置き換えたい不等式に基づくnumpy配列の値の置換

x=np.array([0.3,7,8,-5.5,1,0.1]) 

与えられ、0と5の間にあるものは、1に置き換えられるだろう、と残りは2に置き換えられます取得するには:

pandas.cut(pandas.DataFrame(x).iloc[:,0],[-np.inf,0,5,np.inf],labels=[0,1,2],right=False) 

をそれ自体をnumpyの使用していることを行うために、より直接的な方法がある場合、私は思っていた:

x=np.array([1,2,2,0,1,1]) 

を私はpandas.cutで次のようにすることを行うことができます。私は3つ以上のカテゴリを持つことができることに注意してください。なぜなら、pandas.cutと同様に動作する、より体系的なものを探していたのです。これはビンの要素の一般的な数を組み込むことは、拡張可能である

np.searchsorted([0,5],x) 

からnp.searchsortedを活用する

答えて

6

パーフェクトセットアップ。このように、一般的に置く -

bins = [0,5] 
out = np.searchsorted(bins,x) 

サンプルの実行 -

In [46]: x 
Out[46]: array([ 0.3, 7. , 8. , -5.5, 1. , 0.1]) 

In [47]: np.searchsorted([0,5],x) 
Out[47]: array([1, 2, 2, 0, 1, 1]) 

In [55]: np.searchsorted([0,2,5],x) 
Out[55]: array([1, 3, 3, 0, 1, 1]) 

In [60]: np.searchsorted([0,2,5,7],x) 
Out[60]: array([1, 3, 4, 0, 1, 1]) 
+0

素晴らしいソリューションです、ありがとう! –

2

理由だけではなく、digitizeを使用しませんの?

import numpy as np 
x = np.array([0.3,7,8,-5.5,1,0.1]) 
bins = np.array([-np.inf,0,5,np.inf]) 
np.digitize(x, bins) - 1 # Results are 1-based index 
# array([1, 2, 2, 0, 1, 1], dtype=int64) 
関連する問題