2017-10-29 95 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.是否有類似於可以在此使用的平衡功能?分配值,以底部和頂部5百分numpy的陣列

回答

2

如何計算5和95百分位與np.percentile首先,與所述兩個閾值陣列中的與np.searchsorted比較值賦予1如果值介於然後用np.where有條件地創建數組:

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

它使用底部和頂部5個百分點之間的比較,然後您可以在一個boleean數組上進行數學運算。

在這種情況下:

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

編輯:使用或代替和