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

如何找到阈值,使数组中大于它的元素数量匹配目标值?

寻找数组阈值:匹配目标元素数量的高效方案

给定一个数值数组和目标数量,需找到一个阈值,使得数组中大于该阈值的元素数量等于(或尽可能接近)目标值。

原方案的问题

原有的固定步长遍历方法存在效率低、精度不足的问题,示例代码如下:

import numpy as np
arr = np.random.rand(100)
target = 80
for i in range(100):
    t = i * 0.01
    if (arr > t).sum() < target: break
print(t)

该方法通过遍历固定步长的候选阈值,不仅遍历次数多、效率低下,而且步长直接限制了阈值的精度,无法得到更精确的结果。

高效优化方案

使用scipy.optimize.bisect(二分查找算法)可以高效且高精度地解决这个问题。二分查找通过不断缩小搜索区间,能在对数时间复杂度内定位到符合要求的阈值,精度可灵活调整。

示例代码:

import numpy as np
from scipy.optimize import bisect

arr = np.random.rand(100)
target = 80

# 定义差值函数:返回当前阈值下,大于阈值的元素数与目标值的差值
def count_diff(threshold):
    return (arr > threshold).sum() - target

# 设置二分查找的上下界:避免边界值问题,在数组极值外小幅扩展
search_low = arr.min() - 1e-9
search_high = arr.max() + 1e-9

# 执行二分查找
optimal_threshold = bisect(count_diff, search_low, search_high)

print(f"最优阈值:{optimal_threshold}")
print(f"大于该阈值的元素数量:{(arr > optimal_threshold).sum()}")

内容的提问来源于stack exchange,提问作者John Henckel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:18:24