我非常想在两个值(min
,max
)之间生成n
随机整数,其和等于给定的数字m
。
注意:我在StackOverflow中发现了类似的问题;但是,它们并没有准确地解决这个问题(使用Dirichlet
函数,因此数字介于0和1之间)。
例如:我需要8个0到24之间的随机数(整数),其中8个生成的数字的总和必须等于24。
感谢您的帮助。谢谢
这是一个基于这个答案的可能解决方案。看来dirichlet
方法只在0和1之间起作用。最初的答案应该是完全正确的。一旦你评论说它达到了你的目的,我很乐意删除它。
别忘了对原来的答案投赞成票。
target = 24
x = np.random.randint(0, target, size=(8,))
while sum(x) != target:
x = np.random.randint(0, target, size=(8,))
print(x)
# [3 7 0 6 7 0 0 1]
这是分区数理论的一个例子。这是解决办法
def partition(n,k,l, m):
if k < 1:
raise StopIteration
if k == 1:
if n <= m and n>=l :
yield (n,)
raise StopIteration
for i in range(l,m+1):
for result in partition(n-i,k-1,i,m):
yield result+(i,)
n = 24 # sum value
k = 8 # partition size
l = 0 # range min value
m = 24 # range high value
result = list(partition(n,k,l,m ))
这将给出满足条件的所有组合。ps这相当慢,因为它给出了分区大小的所有情况。
你可以使用整数分布,它自然地和一些固定数-多项式。
只要前后移动,它就会自动工作
密码
import numpy as np
def multiSum(n, p, maxv):
while True:
v = np.random.multinomial(n, p, size=1)
q = v[0]
a, = np.where(q > maxv) # are there any values above max
if len(a) == 0: # accept only samples below or equal to maxv
return q
N = 8
S = 24
p = np.full((N), 1.0/np.float64(N))
mean = S / N
start = 0
stop = 24
n = N*mean - N*start
h = np.zeros((stop-start), dtype=np.int64)
print(h)
for k in range(0, 10000):
ns = multiSum(n, p, stop-start) + start # result in [0...24]
#print(np.sum(ns))
for v in ns:
h[v-start] += 1
print(h)
问题内容: 我想知道如何在两个给定值之间生成一个随机数。 我可以使用以下内容生成一个随机数: 但是,如何生成0到100(含)之间的随机数? 问题答案: 你可以使用例如 r.nextInt(101) 对于更通用的“在两个数字之间”,请使用: 这会为你提供介于10(含)和100(不含)之间的随机数
第一次在StackOverflow。我希望有人能帮我搜索一个算法。 我需要在给定的范围内生成N个随机数,求和到给定的和! null 可以生成N个常数和的数,解模,像这样:生成和是常数的随机数,但我不能用范围来完成。 或者通过产生N个随机值,将它们求和,然后将常数和除以随机和,然后将每个随机数乘以这个商,就像这里提出的那样。 我不能采用这些解决方案的主要问题是,我的每个随机值都有不同的范围,我需要这
问题内容: 有没有一种方法可以在JavaScript中生成指定范围内的随机数(例如1到6:1、2、3、4、5或6)? 问题答案: 重要 以下代码仅在最小值为时才有效。不适用于除以外的最小值。 如果要获得1( 且只有1 )和6 之间的随机整数,则应计算: 哪里: 1是起始号码 6是可能的结果数(1 +开始 (6) -结束 (1) )
这个问题以前也有人问过,但我从来没有真正看到过好的答案。 > 我想生成8个和为0.5的随机数。 我希望每个数字都是从一个均匀分布中随机选择的(即下面的简单函数将不起作用,因为数字将不是均匀分布的)。 代码应该是可推广的,这样您就可以生成N个和M(其中M是正浮点)的均匀随机数。如果可能的话,能否也请你解释一下(或用一个图表示)为什么你的解会在适当的范围内均匀地产生随机数? 失手的相关问题: 在pyt
本文向大家介绍C#实现在两个数字之间生成随机数的方法,包括了C#实现在两个数字之间生成随机数的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍一个小编自己写的C#函数,它用于生成两个数之间的一个随机数。 在C#中有一个Random类,使用它可以很方便的生成随机数。其实一个最重要的生成方式就是给它一个最大值和一个最小值,系统可以自动生成该范围内的一个随机数字。 在创建Random对象的时候,需
我试图生成8个范围内的随机数,例如1到100。我生成的很好,但我需要生成随机数,所有生成的随机数和最小-最大范围值之间的特定差异被排除。假设在1到100中,我必须生成2,12,22,32,42,52,62,72的数字。不管怎样,我都可以生成这样的随机数。 提前谢谢。