我正在使用 scipy 并想创建一个具有特定平均值的长度 n 数组。
假设我想要一个长度为 3 且平均值为 2.5 的随机数组,因此可能的选项可能是:[1.5, 3.5, 2.5] [.25, 7.2, .05] 等等……
我需要为每个数组创建许多具有不同长度和不同平均值(指定)的数组,因此欢迎使用通用解决方案。
只需在您想要的范围内生成数字(在这种情况下为 0...10)
>>> import random
>>> nums = [10*random.random() for x in range(5)]
算出平均值
>>> sum(nums)/len(nums)
4.2315222659844824
将平均值移动到您想要的位置
>>> nums = [x - 4.2315222659844824 + 2.5 for x in nums]
>>> nums
[-0.628013346633133, 4.628537956666447, -1.7219257458163257, 7.617565127420011, 2.6038360083629986]
>>> sum(nums)/len(nums)
2.4999999999999996
您可以使用您喜欢的任何分布/范围。通过以这种方式移动平均值,它总是会让你的平均值为 2.5(或非常接近)
你还没有指定你想要的分布。
也不清楚您是否希望实际数组的平均值为 2.5,或者所有数组的摊销平均值为 2.5。
最简单的解决方案——从 0 到 2*avg 的均匀分布中的三个随机数——是这样的:
return 2*avg * np.random.rand(3)
如果你想保证数组的平均值是 2.5,这是一个非常简单的约束,但是有很多不同的方法可以满足它,你需要描述你想要的方法。例如:
n0 = random.random() * 2*avg
n1 = random.random() * (2*avg - n0)
n2 = random.random() * (2*avg - n0 - n1)
return np.array((n0, n1, n2))
我找到了解决问题的方法。
numpy.random.triangular(左,模式,右,大小=无)
然而,小问题是它强制样本上的三角形分布。