python - numpy 排序和删除最高值
问题描述
我不知道这个算法是否有名字,但基本上对于给定的y
,我想找到最大值x
,这样:
import numpy as np
np_array = np.random.rand(1000, 1)
np.sum(np_array[np_array > x] - x) >= y
当然,搜索算法将找到最高值n_1
,将其减少到第二大值 ,n_2
。停止如果n_1 - n-2 > y
;否则将两者都归约n_1
到n_2
,如果...n_3
则停止(n_1 - n_3) + (n_2 - n_3) > y
但我觉得必须有一个算法来生成一个x
收敛到其真实值的 { s} 序列。
解决方案
这是对原始问题的回答,我们在其中找到了最大值x
st np.sum(np_array[np_array > x]) >= y
:
您可以通过排序和累积总和来完成此操作:
s = np.sort(np_array)[::-1]
c = np.cumsum(s)
i = np.argmax(c > y)
result = s[i]
s
x
是按降序排列的候选人。比较累积总和c
可以y
告诉您总和将超过的确切位置y
。np.argmax
返回第一个发生的位置的索引。结果是从 中提取的索引s
。
numpy 中的这种计算比它需要的要慢,因为我们可以立即短路总和而无需计算单独的掩码。然而,复杂性是相同的。您可以使用 numba 或 cython 加速以下操作:
s = np.sort(np_array)[::-1]
c = 0
for i in range(len(s)):
c += s[i]
if c > y:
break
result = s[i]
推荐阅读
- xml - 为什么外部 DTD 不验证 XML 文件?
- vb.net - 创建窗口句柄时出错。控件未正确处理导致内存堆积和崩溃
- c - 捕获 C 函数参数名称
- watchkit - 通过使用 URL 请求获取数据来更新 Apple Watch 复杂功能
- python - 刚开始学习 django - 我在 VS Code 中得到“未定义的变量 'auth'”,并且在服务器上出现另一个错误
- java - Maven 模块,在 Eclipse 上调试
- pandas - 将日期差异与 pandas 时间戳值进行比较
- angular - 如果我有虚拟机并且不想使用 localhost,如何正确使用 Angular CLI
- javascript - 从数据库中获取文档快照并将其 ServerValue.TIMESTAMP 值转换为日期
- date - 有没有办法计算日期范围内的天数?