将值分配给numpy数组的底部和顶部5个百分位

时间:2017-10-29 03:27:12

标签: python numpy

File Oct 28, 11 12 22 PM

在上面的numpy数组中,我想计算一个新数组,其中底部和前5百分位值的值被赋值为100而其他值被赋值为1.是否存在类似于heaveside的函数,它可以是在这里使用?

2 个答案:

答案 0 :(得分:2)

如何首先使用np.percentile计算5和95百分位数,将数组中的值与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 :(得分: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])

编辑:使用或代替和