【问题标题】:Avoid duplicate random values避免重复的随机值
【发布时间】:2019-06-15 20:51:02
【问题描述】:

按照this post,我可以生成具有固定总和的随机整数。但是,我想避免任何重复的数字(例如以下示例中的20):

import numpy as np

_sum = 100
n = 5
rnd_array = np.random.multinomial(_sum, np.ones(n)/n, size=1)[0]
rnd_array

>>> array([20, 24, 20, 21, 15])

我怎样才能做到这一点?

【问题讨论】:

  • 答案在这个链接中。这个问题已经回答我猜stackoverflow.com/questions/22842289/…
  • @Althaf1467 - 就生成随机数而言,是的,您链接到的帖子解决了这个问题。但我也希望随机值同时汇总为特定值。

标签: python python-2.7 numpy random


【解决方案1】:

random.sample 返回一个唯一值列表 (see the docs)。它是这样调用的:

sample = random.sample(range(100), 5)

编辑:为了使用它来获得固定总和,我建议阅读this thread,其中重要的代码是:

from random import*
def f(n,s):
  r=min(s,1)
  x=uniform(max(0,r-(r-s/n)*2),r)
  return n<2and[s]or sample([x]+f(n-1,s-x),n)

【讨论】:

  • 你的答案解决了一半的问题:)。生成的随机值需要求和为特定值(在我的示例中,5 个随机整数的总和应为 100)。
  • @Joseph 我进行了编辑以显示sample 在该上下文中的使用方式
  • 感谢您的编辑。生成的浮点值确实是随机的,总和为 100。为了得到我需要的整数值,我使用了x = int(uniform(max(0, r - (r - s/n) * 2), r))。再次感谢你:)
猜你喜欢
  • 1970-01-01
  • 2017-12-26
  • 2023-03-23
  • 1970-01-01
  • 2010-12-19
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多