File Oct 28, 11 12 22 PM
在上面的numpy数组中,我想计算一个新数组,其中底部和前5百分位值的值被赋值为100而其他值被赋值为1.是否存在类似于heaveside的函数,它可以是在这里使用?
答案 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])
编辑:使用或代替和