python生成随机整数取其平均值_在python中如何生成满足特定均值和中值的随机数?...

一种使结果真正接近您想要的结果的方法是生成两个独立的随机范围,长度为100,满足您的中值约束,并包含所有期望的数字范围。然后通过连接数组,平均值将大约为12,但不完全等于12。但因为这只是意味着你要处理的,你可以简单地通过调整这些数组中的一个来生成你期望的结果。在In [162]: arr1 = np.random.randint(2, 7, 100)

In [163]: arr2 = np.random.randint(7, 40, 100)

In [164]: np.mean(np.concatenate((arr1, arr2)))

Out[164]: 12.22

In [166]: np.median(np.concatenate((arr1, arr2)))

Out[166]: 6.5

下面是一个矢量化的非常优化的解决方案,它通过限制随机序列的创建来对抗任何其他使用循环或python级别代码的解决方案:

^{pr2}$

演示:arr = gen_random()

print(np.median(arr))

print(arr.mean())

6.5

12.0

函数背后的逻辑:

为了让我们有一个符合这个标准的随机数组,我们可以将3个数组连接在一起arr1,mid和{}。arr1和arr2各包含99个项目,mid包含2个项目6和7,因此最终结果为6.5作为中位数。现在我们创建两个长度为99的随机数组。要使结果具有12个平均值,我们需要做的就是找出当前和与12 * 200之间的差,然后从我们的N个最大数中减去结果,在这种情况下,我们可以从arr2中选择它们并使用N=50。在

编辑:

如果在结果中使用浮点数不是问题,您可以实际缩短函数,如下所示:import numpy as np

import math

def gen_random():

arr1 = np.random.randint(2, 7, 99).astype(np.float)

arr2 = np.random.randint(7, 40, 99).astype(np.float)

mid = [6, 7]

i = ((np.sum(arr1 + arr2) + 13) - (12 * 200)) / 40

args = np.argsort(arr2)

arr2[args[-40:]] -= i

return np.concatenate((arr1, mid, arr2))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值