将值赋给numpy数组的底部和顶部5个百分点

2024-10-02 08:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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。这里有没有类似heaveside的功能?你知道吗


Tags: 功能numpy数组array赋值heaveside
2条回答

它没有使用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])

编辑:使用或代替and

np.percentile计算5%和95%怎么样?首先,将数组中的值与np.searchsorted的两个阈值进行比较,如果值介于1之间,则给出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])

相关问题 更多 >

    热门问题