假设我有一个正态分布,我想从中抽样 1000 次,如果该值位于前 20 个百分位,我想将计数器加 1。最佳解决方案是什么?
我正在尝试使用 numpy 解决此问题,但无法弄清楚其背后的数学原理。现在我有了这个,但我觉得它可以用数学来完成:
import numpy as np
s = np.random.normal(0, 1, 1000)
sum([val for val in s if val > np.percentile(s, 80)])
这是生成的数组(您可以使用均值和标准差,它们是默认值):
mu = 0
std = 1
arr = np.random.normal(mu, std, 1000)
这为您提供了前 20 个百分位的项目数量:
arr[arr > np.percentile(arr, 80)].size
Out[30]: 200
编辑:您的代码也不错。但是您不想对这些值求和,而是想对它们进行计数。因此,每当 val > np.percentile(s, 80)
您想对 1 求和时:
sum([1 for val in s if val > np.percentile(s, 80)])
Out[35]: 200
虽然这会比 numpy 的方法慢。
我是一名优秀的程序员,十分优秀!