gpt4 book ai didi

python - 使用 python 用分位数索引替换 numpy 数组中的条目

转载 作者:行者123 更新时间:2023-11-30 22:46:46 25 4
gpt4 key购买 nike

我有一个包含数字的一维 numpy 数组,我希望每个数字都替换为其所属分位数的索引。

这是我的五分位指数代码:

import numpy as np

def get_quintile_indices( a ):

result = np.ones( a.shape[ 0 ] ) * 4

quintiles = [
np.percentile( a, 20 ),
np.percentile( a, 40 ),
np.percentile( a, 60 ),
np.percentile( a, 80 )
]

for q in quintiles:
result -= np.less_equal( a, q ) * 1

return result

a = np.array( [ 58, 54, 98, 76, 35, 13, 62, 18, 62, 97, 44, 43 ] )
print get_quintile_indices( a )

输出:

[ 2.  2.  4.  4.  0.  0.  3.  0.  3.  4.  1.  1.]

您会看到,我从一个用尽可能高的索引初始化的数组开始,对于每个五分位数切点,从小于或等于五分位数切点的每个条目中减去 1。有一个更好的方法吗?可用于将数字映射到切点列表的内置函数?

最佳答案

首先,我们可以一次性生成这些五分位数 -

quintiles = np.percentile( a, [20,40,60,80] )    

对于获取偏移量的最后一步,我们可以简单地使用 np.searchsorted这可能就是您正在寻找的内置功能,就像这样 -

out = np.searchsorted(quintiles, a)

或者,将循环代码直接转换为矢量化版本将是 broadcasting ,就像这样 -

# Use broadcasting to perform those comparisons in one go.
# Then, simply sum along the first axis and subtract from 4.
out = 4 - (quintiles[:,None] >= a).sum(0)

如果quintiles是一个列表,我们需要将其分配为数组,然后使用广播,就像这样 -

out = 4 - (np.asarray(quintiles)[:,None] >=  a).sum(0)

关于python - 使用 python 用分位数索引替换 numpy 数组中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40769979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com