我正在使用scipy并希望创建一个具有特定平均值的legnth n数组。
假设我想要一个长度为3且平均值为2.5的随机数组,因此可能的选项可能是: [1.5,3.5,2.5] [.25,7.2,.05] 依此类推......
我需要创建许多不同长度和不同平均值(指定)的数组,因此欢迎使用通用解决方案。
答案 0 :(得分:9)
只需在您想要的范围内生成数字(在这种情况下为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(或非常接近它)
答案 1 :(得分:2)
您尚未指定所需的分发。
目前还不清楚您是否希望实际数组的平均值为2.5,或者所有数组的平均摊销均为2.5。
最简单的解决方案 - 从0到2 *均匀分布的三个随机数是这样的:
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))
答案 2 :(得分:-2)
我找到了问题的解决方案。
numpy.random.triangular(左,模式,右,大小=无)
然而,小问题是它会在样品上施加三角形分布。