使用高斯概率加权从选择中选择一个随机数

Picking a random number from choices using gaussian probability weighting

我有一个数组:[1,1.2,1.4,1.5.....] 有 1000 个元素。我想使用具有给定均值的加权高斯概率从这些选择中随机选择一个值。例如,我设置的平均值为 25。所以选择的权重是一个高斯函数,平均值在 25 左右,即大多数选择的数字都在 25 左右。

复制 这个 但使用 python 而不是 javascript。 概率曲线是这样的:

背景信息 我试图在一些具有不对称误差条的数据上拟合曲线,但我找不到任何 python 模块来进行此类拟合。所以我正在进行蒙特卡洛模拟,我从误差范围内随机选择 x 和 y 数据点,并将数据值作为平均值,然后重复(比方说)1000 次并优化均方误差。

我的数据是这样的:

你不能使用利用numpy的随机抽样方法吗?

numpy.random.sample(array, probabilities)

可能定义概率的位置:

probabilities = [scipy.stats.norm(your_mean, your_stdev).pdf(i) for i in array]

显然不是一个全新的解决方案,但利用了一些方便的库。

只需构建一个权重数组,存储每个数字的权重,然后将其传递给random.choices

import random

def weight_func(x):
  # Calculate the weight for x here.
  pass

# List of choices
choices=[1,2,3,4,5,6]
# List of weights.  Note that the weights need not sum to 1.
weights=[weight_func(x) for x in choices]
# Do a weighted sample (the 1000 here is the sample size and is arbitrary)
print(random.choices(choices, k=1000, weights=weights))

numpy 的 random.triangular 模块对我有用:

np.random.triangular(left, mode, right, size=None)

左 = 最低值

右 = 最高值

众数 = 概率最高的值

size = 样本数量