我正在使用scipy并希望创建一个具有特定平均值的第n个数组。创建一个具有特定平均值的随机数组
假设我想长度为3的平均为2.5的随机阵列,因此可能的选项可以是: [1.5,3.5,2.5] [0.25,7.2,0.05] 等等等等...
我需要创建许多这样的数组,具有不同的长度和不同的平均值(指定)为每个,所以广泛的解决方案将受到欢迎。
我正在使用scipy并希望创建一个具有特定平均值的第n个数组。创建一个具有特定平均值的随机数组
假设我想长度为3的平均为2.5的随机阵列,因此可能的选项可以是: [1.5,3.5,2.5] [0.25,7.2,0.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 *平均-是这样的:
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(左,模式,右,大小=无)
然而,次要问题是,它迫使在样品上的三角分布。
但是你想要什么样的分布? – askewchan 2013-03-19 05:03:08
平均值是否应该是精确的,或者您是否可以将您的随机数重新居中在期望的平均值附近,即if标准随机浮点数[0,1)的长期平均值为0.5,那么您可以通过将中心值加2来移动2.5 ... – 2013-03-19 04:51:39
列表中的数字是否被限制为非负数?如果没有限制,我认为你可以用除最后一个之外的随机数填写全部列表,然后根据其他数字和平均值计算最后一个数字。 – Reorx 2013-03-19 05:00:57
是的,这些数字必须是非负数。 – DotPi 2013-03-19 05:03:37