gpt4 book ai didi

python - 对六个随机数施加约束,使三个负数和三个正数等于 1?

转载 作者:行者123 更新时间:2023-12-03 20:21:56 25 4
gpt4 key购买 nike

我如何使三个随机负数和三个正随机数等于 1,并限制在 -1 和 1 之间。例如,

         random_nums = np.array([-.2,-.3,-.5,.5,.8,.7])) = 1

我不想要 np.uniform 答案我需要 arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6] 中的 6 个随机数=1。然后想以不同的顺序对它们进行洗牌 shuffle(random_nums)。

最佳答案

显然,此方案生成的数字永远不会是真正的“随机”,因为要满足此约束,您将不得不限制其中的一些数字。

但是,撇开警告不谈,这是生成此类数组的一种方法:

  1. 生成一对 (a,b) 其中 a = rand(), 和 b=-rand()
  2. 如果a+b < 0,反向保留(a,b),否则a,b = -a, -b
  3. 用另一对 (c,d) 重复
  4. 如果 a+b+c+d < 1 则保持 (c,d),否则 c,d = -c, -d。
  5. 如果 a+b+c+d < 0 则 a,b,c,d = -a, -b, -c, -d
  6. 您现在应该有一个积极的 a+b+c+d。获取[-(a+b+c+d), 0]范围内的随机数e
  7. 你的最终数字是 f = 1 - (a+b+c+d+e)

python 实现的粗略(未经测试)示例:

def getSix():
a = numpy.random.rand()
b = -numpy.random.rand()
a,b = (a,b) if a+b > 0 else (-a,-b)
c = numpy.random.rand()
d = -numpy.random.rand()
c,d = (c,d) if a+b+c+d < 1 else (-c, -d)
a,b,c,d = (a,b,c,d) if a+b+c+d > 0 else (-a, -b, -c, -d)
e = -numpy.random.rand()*(a+b+c+d)
f = 1 - (a+b+c+d+e)
return numpy.array([a,b,c,d,e,f])

显然,这对于您的 6 个元素的情况非常具体,但如果需要,您可以想出一种方法将其推广到更多元素。

关于python - 对六个随机数施加约束,使三个负数和三个正数等于 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59347233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com