Python 生成大小为n、平均值为20、最小值为2、最大值为25的整数列表,单位为numpy
我想生成一个大小为n的整数列表,平均值=20,最小值=2,最大值=25 并尝试了以下代码。这非常耗时Python 生成大小为n、平均值为20、最小值为2、最大值为25的整数列表,单位为numpy,python,numpy,Python,Numpy,我想生成一个大小为n的整数列表,平均值=20,最小值=2,最大值=25 并尝试了以下代码。这非常耗时 # generate service time with mean = 20, min = 2 and max = 25 def gen_avg(n, expected_avg=20, a=2, b=25): while True: l = np.random.randint(a, b, size=n) avg = np.mean(l)
# generate service time with mean = 20, min = 2 and max = 25
def gen_avg(n, expected_avg=20, a=2, b=25):
while True:
l = np.random.randint(a, b, size=n)
avg = np.mean(l)
if avg == expected_avg:
return l
请用一些快速的方法帮助我你可以生成一个随机列表,然后通过替换大于平均值的数字(如果当前平均值太低)或替换小于平均值的数字(如果当前平均值太高)来稍微调整数字,就像这样
def gen平均值(n,预期平均值=20,a=2,b=25):
l=np.random.randint(a,b,size=n)
尽管如此:
如果np.平均值(l)=预期平均值:
打破
而np.平均值(l)>预期平均值:
c=np.random.choice(np.where(l>expected_avg)[0])
l[c]=np.random.randint(a,预期平均值+1)
而np.平均值(l)<预期平均值:
c=np.random.choice(np.where(l您可以生成一个随机列表,然后通过替换大于平均值(如果当前平均值太低)的数字或替换小于平均值(如果当前平均值太高)的数字来稍微调整数字,如是
def gen平均值(n,预期平均值=20,a=2,b=25):
l=np.random.randint(a,b,size=n)
尽管如此:
如果np.平均值(l)=预期平均值:
打破
而np.平均值(l)>预期平均值:
c=np.random.choice(np.where(l>expected_avg)[0])
l[c]=np.random.randint(a,预期平均值+1)
而np.平均值(l)<预期平均值:
c=np.random.choice(np.where)(l如果你的平均值不等于你的(max+min)/2,这意味着你不想要一个均匀分布。那么你必须指定其他分布。你想从哪个分布生成样本?请注意,这样的列表必须至少有5个元素(否则无法达到目标最小值、最大值和平均值)。表格[2,25,25,25,23,20,20,20,…]
的列表将起作用(根据您需要使用多个20
s来填充长度n
),但我想这不是你想要的。你还有什么其他要求吗?@MarkDickinson,说得好,我想这就是答案!@MarkDickinson我想要单峰的distribution@AKareem我想要单峰分布或近似正态分布,因为你的平均值不等于你的(最大+最小)/2这意味着您不需要统一的分布。然后您必须指定其他分布。您希望从哪个分布生成样本?请注意,这样的列表必须至少包含5个元素(否则无法实现目标最小值、最大值和平均值)。表单的列表[2、25、25、23、20、20、20、…]
会起作用(根据需要使用多达20个s的pad来获得长度n
),但我想这不是你想要的。你还有什么其他要求吗?@MarkDickinson,说得好,我想这就是答案!@MarkDickinson我想要单峰的distribution@AKareem我想要单峰分布或近似正态分布
def gen_avg(n, expected_avg=20, a=2, b=25):
l = np.random.randint(a, b, size=n)
while True:
if np.mean(l) == expected_avg:
break
while np.mean(l) > expected_avg:
c = np.random.choice(np.where(l>expected_avg)[0])
l[c] = np.random.randint(a, expected_avg+1)
while np.mean(l) < expected_avg:
c = np.random.choice(np.where(l<expected_avg)[0])
l[c] = np.random.randint(expected_avg, b)
return l