问题
I的 特定实例 的int范围是1-100。我想在此范围内生成n个总数,这些总数应 尽可能均匀地分布, 并包括第一个和最后一个值。
例
start = 1, end = 100, n = 5
Output: [1, 25, 50, 75, 100]
start = 1, end = 100, n = 4
Output: [1, 33, 66, 100]
start = 1, end = 100, n = 2
Output: [1, 100]
我目前所拥有的
实际上是一种可行的方法,但是我一直觉得自己在想这个问题,而错过了一些更简单的方法?这是最有效的方法还是可以改进?
def steps(start, end, n):
n = min(end, max(n, 2) - 1)
mult = end / float(n)
yield start
for scale in xrange(1, n+1):
val = int(mult * scale)
if val != start:
yield val
请注意,我确保此函数将始终至少返回范围的下限值和上限值。所以,我强迫n >= 2
仅作为搜索参考,我正在使用它来从渲染的序列中采样图像帧,通常在该序列中需要第一个,中间,最后一个。但是我希望能够更好地缩放以处理非常长的图像序列并获得更好的覆盖范围。
解决:从选定的答案
我最终使用了@vartec的答案的这个经过稍微修改的版本,作为生成器,并且还设置n
了安全性上限:
def steps(start,end,n):
n = min(end, max(n, 2))
step = (end-start)/float(n-1)
return (int(round(start+x*step)) for x in xrange(n))
您需要适当的舍入:
def steps(start,end,n):
if n<2:
raise Exception("behaviour not defined for n<2")
step = (end-start)/float(n-1)
return [int(round(start+x*step)) for x in range(n)]
如何在一定范围内生成安全的统一随机数?范围可能在0到100之间。(上限不是2的幂)。 <代码>java。安全SecureRandom似乎提供了范围0。。2^n。
0.1-0.2:********** 0.2-0.3:******** 0.3-0.4:********* 0.5-0.6:********* 0.6-0.7:********* 0.7-0.8:********* 0.4-0.5:********* 0.5-0.6:********* 0.6-0.7:********* 0.1-0.2:********* 0.2-0.3:********* 0.
我试图找到一种有效的算法来生成一个给定节点数的简单连通图。类似于:
我试图在两者之间生成一个随机的双倍,但不包括它的下界和上界(lower,upper)。我见过很多关于从生成一个数字的问题,包括它的下界,但不包括它的上界[lower,uper),但它们没有回答我的问题,因为它们没有解决这个问题。 我想出了两个“解决方案”来解决这个问题,但对任何一个都不满意。 虽然这几乎每次都能在第一次尝试时给出一个有效的结果,但它似乎不一致且笨拙,而且在rng返回0.0的可能性很
问题内容: 我有一个问题,我想使用概率分布生成一组1到5之间的随机整数值。 泊松和逆伽玛是两个分布,它们显示了我所追求的特征(多数情况下为平均值,较少的较高数)。 我正在使用Apache Commons Math,但不确定如何使用可用的分布来生成所需的数字。 问题答案: 从问题描述中,听起来好像您实际上想要从离散的概率分布中生成样本,并且您可以将其用于此目的。为每个整数选择适当的概率,也许类似以下
我正在做关于收入分配的项目……我想生成随机数据来测试这个理论。假设我有N=5个国家,每个国家有n=1000人口,我想为每个人口中的每个人生成随机收入(NORMAL DISTRIBUTION),收入约束在0到1之间,所有国家的均值和DIFFERENT均方差。我使用函数rNorm(n, Memex, sd)来做这件事。我知道统一分布(runif(n, min, max)有一些设置min, max的参数