首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何生成某个范围内的随机整数

如何生成某个范围内的随机整数
EN

Stack Overflow用户
提问于 2014-05-01 20:26:00
回答 1查看 2.8K关注 0票数 2

我正在编写的一个程序要求我模拟基因的突变。如果选择该基因的某个实例(J)进行突变,则它必须随机地成为可选基因的预定义子集之一。这些离散基因由0到K-1范围内的整数来标记,其中K等于等位基因总数。

所以基本上,我需要帮助写代码随机选择一个在0到K-1范围内的整数不等于J。任何帮助都是非常感谢的!

另一个编辑:感谢到目前为止的所有帮助,我提出了以下内容,这忽略了我不能等于J的要求。然而,我遇到的另一个问题是这个过程必须重复多次,并且由于每次使用相同的种子,i的值总是相同的。我应该如何确保种子值不会在每一代都保持不变?再一次,我们非常感谢您的帮助!

代码语言:javascript
运行
复制
program randtest

implicit none

  real*4        :: u(5)
  integer       :: i(5)
  integer       :: k = 4
  integer, dimension (1) :: seed = (/2817/)

  call random_seed(put=seed) 

  call random_number(u)

i = floor((k+1)*u) 

 print *, i

 end program randtest
EN

回答 1

Stack Overflow用户

发布于 2014-05-01 21:10:55

对于集合{0,1,...,K-1},确实可以使用the other question答案中给出的方法。J (0<=J<=K-1)的复杂性可以通过在采样时拒绝J来处理。

然而,更好的方法是注意有K-2个有效整数:{0,1,...,J-1,J+1,...,K-1}。因此,使用该方法在{0,1,...,K-2}上生成一个整数,并将任何可能受拒绝J影响的内容上移。

代码语言:javascript
运行
复制
call random_number(u)
i = FLOOR((K-1)*u)  !this would be how I would define the range
if (i.ge.J) i=i+1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23407641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档