【小结】C++中如何生成随机数?

标签: OpenCV C++随机函数 RNG 随机数生成器
7人阅读 评论(0) 收藏 举报

C++编程时经常要用到随机数,那么到底有哪些随机数产生器或函数呢?我这里来做个小结!


1、RNG(OpenCV中的随机数生成器)

RNG是OpenCV中的一个类,具体使用方法如下:

  • 均匀随机数:
RNG myRNG; //定义RNG类
double r1 = myRNG.uniform(0, 1); //只产生0,值得注意!
double r2 = myRNG.uniform(0.0, 1.0); //产生[0, 1)的随机double型浮点数
double r3 = myRNG.uniform(0.f, 1.f); //产生[0, 1)的随机float型浮点数
double r4 = myRNG.uniform(0, 10); //产生[0, 10)的随机整数(r4也可以是int、float型)
  • 高斯(正态)随机数:
RNG myRNG;
double r5 = myRNG.gaussian(2); //括号内为高斯分布的参数sigma(double型)
  • 当定义RNG类时,系统默认给构造函数赋初值,这样会使得程序每次运行所产生的结果都相同,方便测试工作需要。但有时我们需要使其每次运行的结果都不同,该如何解决呢?通常我们将种子设置为当前时间,如此一来我们每次获取的随机数就不相同了:
RNG myRNG((unsigned)time(NULL)); //将当前时间(unsigned)time(NULL)设置为种子
double r5 = myRNG.uniform(0.0, 1.0); 
  • 定义随机矩阵
/*方法为fill(<#InputOutputArray mat#>, <#int distType#>, <#InputArray a#>, <#InputArray b#>)
其中distType可以是RNG::UNIFORM或RNG::GAUSSIAN。
当类型选择为RNG::UNIFORM型时,a为下界(闭区间),b为上界(开区间)
当类型选择为RNG::GAUSSIAN型时,a为均值,b为标准差*/
RNG myRNG; 
Mat myMat(3, 3, CV_8U); //定义一个3x3的单通道无符号8位型矩阵
myRNG.fill(myMat, RNG::UNIFORM, 0, 10); //填充[0, 10)的随机整数到上述矩阵中

2、函数系列

函数 使用方法
rand() 返回一个[0, RAND_MAX)的随机数,返回类型与接收返回值的变量类型有关,RAND_MAX在stdlib.h中有定义。
rand() % n + a 返回一个[a, n)的随机整数。
rand() % RAND_MAX 返回一个[0, 1)的随机浮点数。
srand(unsigned int) 设置种子,可以使上述函数在程序每次运行时产生的随机数序列都不一样。一般参数可以设置为(unsigned)time(NULL)或(int)time(0)。
randu(dst, low, high) 返回一个[low, high)的随机数矩阵或数组dst。
randn(dst, mean, stddev) 返回一个均值为mean、标准差为stddev的高斯分布随机数矩阵或数组dst。
randShuffle(dst) 将原矩阵或数组打乱重排。
查看评论

C++如何生成随机数

随机数的生成 1.最简单的随机数生成 只要产生随机数而不需要设定范围的话,只要用rand()就可以了, rand()会返回一随机数值, 范围在0至RAND_MAX 间。 RAND_MAX定义在...
  • fenxinzi557
  • fenxinzi557
  • 2016-06-22 11:11:52
  • 4919

c++中如何产生随机数

  • 2010年12月15日 14:21
  • 6KB
  • 下载

C++中用rand()和srand()产生随机数

标准库(被包含于中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff)...
  • Weeendy
  • Weeendy
  • 2016-11-17 08:04:16
  • 1326

C++生成54个不同的随机数

利用C++生成不同的随机数的函数rand()辅以srand()函数生成0~53之间的54个数字(之所以选择54是因为为洗牌而定) 算法一:先定义一个数组(可以全为0或者同一个数,也可以不赋值),首先...
  • u010786659
  • u010786659
  • 2015-06-05 11:49:36
  • 1315

C++产生正态分布的随机数

方法一:用[0,1]均匀分布模拟:转自http://blog.xoyo.com/jaysara/article/295603.shtml double gauss(doulbe mean,double...
  • ariesjzj
  • ariesjzj
  • 2008-03-24 20:13:00
  • 5129

C/C++——生成随机数

1、不指定范围的随机数在C/C++中,产生随机数需要使用到函数srand()函数和rand()函数。在C语言中,srand()函数和rand()函数都是定义在2、在指定范围内生成随机数2.1、生成在指...
  • google19890102
  • google19890102
  • 2016-10-18 17:26:16
  • 3708

一种用C++自带的类生成服从正态分布的随机数。

今天写关于深度学习的代码时,里面要用服从标准正态分布的随机数初始化权值,就是matlab里面那个randn函数,网上找了很多方法,最后发现C++本身就有自带的方法生成服从正态分布的随机数序列。下面给出...
  • u011954296
  • u011954296
  • 2016-06-30 19:02:28
  • 5881

控制 C++生成随机数的范围

C++的随机数函数为rand(), 可以获得一个非负整数的随机数。 要让随机数限定在一个范围,可以采用模除加加法的方式。 要产生随机数r, 其范围为 m rand()%(n-m+1)+m 其原...
  • guoguojune
  • guoguojune
  • 2016-05-19 11:56:57
  • 2126

C/C++ 生成[X,Y]内的随机数

在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数。是根据一个数,称为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相...
  • qq_21808961
  • qq_21808961
  • 2017-10-11 15:41:01
  • 780
    个人资料
    等级:
    访问量: 0
    积分: 20
    排名: 0
    文章分类
    文章存档