You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用NumPy高效计算数组中每个元素对应的百分位数?

用NumPy计算数组元素对应的百分位数

要实现给数组中每个元素返回其对应的百分位数,分以下几种场景高效实现:

场景1:数组已排序且无重复元素

如果你的数组已经是升序排列,且没有重复值,直接利用数组长度生成等间距的百分位数即可:

import numpy as np

arrx = np.array([0, 5, 10])
# 生成从0到100的等间距百分位数,数量与数组长度一致
percentiles = np.linspace(0, 100, len(arrx))
print(percentiles)
# 输出:[  0.  50. 100.]

原理:对于长度为n的排序数组,第i个元素(索引从0开始)对应的百分位为i/(n-1)*100,np.linspace会自动生成这个序列。

场景2:数组未排序但无重复元素

如果数组未排序,先通过索引排序映射,再生成百分位数:

import numpy as np

arrx = np.array([10, 0, 5])
# 获取数组排序后的索引位置
sorted_indices = np.argsort(arrx)
# 生成排序后数组对应的百分位数
sorted_percentiles = np.linspace(0, 100, len(arrx))
# 将百分位数按原数组顺序映射回去
percentiles = np.empty_like(arrx, dtype=float)
percentiles[sorted_indices] = sorted_percentiles

print(percentiles)
# 输出:[100.   0.  50.]

场景3:数组包含重复元素

如果数组有重复值,需要先提取唯一值,再给重复元素分配相同的百分位数:

import numpy as np

arrx = np.array([0, 0, 10, 5, 5])
# 获取唯一值及原数组元素对应的唯一值索引
unique_vals, inverse_idx = np.unique(arrx, return_inverse=True)
# 给唯一值生成对应的百分位数
unique_percentiles = np.linspace(0, 100, len(unique_vals))
# 映射回原数组,重复元素将获得相同的百分位数
percentiles = unique_percentiles[inverse_idx]

print(percentiles)
# 输出:[  0.   0. 100.  50.  50.]

以上方法均基于NumPy原生函数,避免了循环,保证了计算效率。

内容的提问来源于stack exchange,提问作者Edy Bourne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:28:17