2017-10-29 8 views
0
array([ 3.497 , 3.0935 , 3.3625 , 3.56425, 3.497 , 4.10225, 
     2.75725, 3.766 , 2.959 , 3.9005 ]) 

上記のnumpy配列では、下位5つのパーセンタイル値に100の値が割り当てられ、その他の値には1が割り当てられる新しい配列を計算します。 1の値。ここで使用できるヘーブサイドに類似した機能はありますか?numpy配列の下端と上端の5パーセンタイルに値を割り当てる

答えて

2

どの値が間に入ると、次いでnp.whereと条件付きアレイを作成する場合1を与えるnp.searchsortedを有する2つの閾値と、配列内の値を比較し、まずnp.percentileで5および95パーセンタイルを算出について:

a = np.array([ 3.497 , 3.0935 , 3.3625 , 3.56425, 3.497 , 4.10225, 
     2.75725, 3.766 , 2.959 , 3.9005 ]) 

np.where(np.searchsorted(np.percentile(a, [5, 95]), a) == 1, 1, 100) 
# array([ 1, 1, 1, 1, 1, 100, 100, 1, 1, 1]) 
1

これはnp.heavenside機能を使用していないので、私はそれはあなたが探しているものだとわからないんだけど、それは動作します:

ret_arr = (99*np.logical_or((array<np.percentile(a,5)),(array>np.percentile(a,95))))+1

これは、ボトム・アンド・トップ・パーセンタイルの間の比較を使用し、次にボレーン・アレイに対して数学演算を実行できるという事実を使用します。この場合

In[73]: ret_arr 
Out[73]: array([ 1, 1, 1, 1, 1, 100, 100, 1, 1, 1]) 

編集:使用またはその代わりと

関連する問題