随机数

你真的用好了Python的random模块吗?

左心房为你撑大大i 提交于 2020-02-22 16:00:59
random模块 用于生成伪随机数 源码位置: Lib/random.py(看看就好,千万别随便修改) 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。 计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。 只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。 Python的这个库在底层使用通用的算法,经过长久的考验,可靠性没得说,但绝对不能用于密码相关的功能。 一、基本方法 random.seed(a=None, version=2) 初始化伪随机数生成器。如果未提供a或者a=None,则使用系统时间为种子。如果a是一个整数,则作为种子。 random.getstate() 返回一个当前生成器的内部状态的对象 random.setstate(state) 传入一个先前利用getstate方法获得的状态对象,使得生成器恢复到这个状态。 random.getrandbits(k) 返回一个不大于K位的Python整数(十进制)

Monte carlo

落花浮王杯 提交于 2020-02-22 09:19:50
转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法。 1、起源 这一方法源于美国在第二次世界大战进研制原子弹的"曼哈顿计划"。Monte Carlo方法创始人主要是这四位:Stanislaw Marcin Ulam, Enrico Fermi, John von Neumann(学计算机的肯定都认识这个牛人吧)和 Nicholas Metropolis。 蒙特卡罗方法的名字来源于摩纳哥的一个城市蒙地卡罗,该城市以赌博业闻名,而蒙特·罗方法正是以概率为基础的方法。与它对应的是确定性算法。 2、解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的"频率"来决定事件的"概率"。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。 为了说明Monte Carlo方法的基本思想,让我们先来看一个简单的例子,从此例中你可以感受如何用Monte Carlo方法考虑问题。 例1:比如y=x^2(对x)从0积到1。结果就是下图红色部分的面积: 注意到函数在(1,1

生成指定位数随机数的方法

落爺英雄遲暮 提交于 2020-02-22 08:56:47
这里说的指定位数一般是指位数较多,不是一般的成百上千那种。 如下面例子,为了使随机数能够尽可能的不重复,其实最好是一位数一位数的去随机,不过这样有点儿2。 我这里用的是byte[],然后把byte[]转化成long。 byte[] sbytes = new byte[8]; Random random = new Random();//其实random不止有random.next()这一个方法哦! random.NextBytes(sbytes); long s = BitConverter.ToInt64(sbytes, 0); 这样就好了! 来源: https://www.cnblogs.com/yuqf/archive/2012/07/31/Random.html

JS生成指定位数的随机

与世无争的帅哥 提交于 2020-02-22 08:55:59
<html><script> //获取指定位数的随机数 function getRandom(num){ var random = Math.floor((Math.random()+Math.floor(Math.random()*9+1))*Math.pow(10,num-1)); } //调用随机数函数生成10位数的随机数 getRandom(10);</script> </html> 实现思路(文末有代码过程及运行结果),以获取10位随机数为例: 1、Math.random()函数可以获得0到1之间的小数,Math.pow(10,10)函数进行幂运算等价于10的10次方,Math.floor()函数向下取整去除小数位; 2、组合起来则可以获得一个10位的随机数:Math.floor(Math.random()*Math.pow(10,10)); 3、但是,如果Math.randow()的第一位小数位为0则可能获得的是9位随机数; 4、将Math.randow()加1,排除第一位小数位为0的情况,相应的幂运算减一位 Math.floor((Math.random()+1))*Math.pow(10,9)); 如此将获得一个10位的随机数,但是都将以1开头; 5、为了开头也能随机取数,可以将1替换为Math.floor(Math.random()*9+1); 6

tomcat启动很慢很慢很慢

試著忘記壹切 提交于 2020-02-22 08:22:13
今天下载tomcat8.5,启动的时候发现非常慢,大概三分钟左右才能启动,网上搜到一个解决方案,在此记录下来 原因: Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了62秒,也即接近1分钟,当然有时花费时间更长,达到5-10分钟。 SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。 在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。 1)如果Java.security.egd 属性或securerandom.source属性指定的是” file:/dev/random”或”file:/dev/urandom ”,那么JVM 会使用本地种子产生器NativeSeedGenerator,它会调用super()方法,即调用 SeedGenerator.URLSeedGenerator(/dev/random)方法进行初始化。 2)如果java.security.egd属性或securerandom.source属性指定的是其它已存在的URL,那么会调用SeedGenerator.URLSeedGenerator(url)方法进行初始化。 这就是为什么我们设置值为” file

明明的随机数

谁说我不能喝 提交于 2020-02-21 17:50:28
描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。 输入 有2行,第1行为1个正整数,表示所生成的随机数的个数:N; 第2行有N个用空格隔开的正整数,为所产生的随机数。 输出 也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。 样例输入 10 20 40 32 67 40 20 89 300 400 15 样例输出 8 15 20 32 40 67 89 300 400 # include <iostream> # include <algorithm> # include <cstring> using namespace std ; int a [ 110 ] , b [ 110 ] ; int main ( ) { int n ; scanf ( "%d" , & n ) ; int i , j = 0 ; char xb [ 6 ] ; for ( i = 0 ; i < n ; i ++ ) { scanf ( "%d" , & a [

Lua数学库(标准库相关)

强颜欢笑 提交于 2020-02-21 01:13:33
数学库 在这一章中(下面关于标准库的几章中同样)我的主要目的不是对每一个函数给出完整地说明,而是告诉你标准库能够提供什么功能。为了能够清楚地说明问题,我可能会忽略一些小的选项或者行为。主要的思想是激发你的好奇心,这些好奇之处可能在参考手册中找到答案。 数学库由算术函数的标准集合组成,比如三角函数库(sin, cos, tan, asin, acos, etc.),幂指函数(exp, log, log10),舍入函数(floor, ceil)、max、min,加上一个变量 pi。数学库也定义了一个幂操作符(^)。 所有的三角函数都在弧度单位下工作。(Lua4.0 以前在度数下工作。)你可以使用 deg和 rad 函数在度和弧度之间转换。如果你想在 degree 情况下使用三角函数,你可以重定义三角函数: local sin , asin , . . . = math . sin , math . asin , . . . local deg , rad = math . deg , math . rad math . sin = function ( x ) return sin ( rad ( x ) ) end math . asin = function ( x ) return deg ( asin ( x ) ) end . . . math . random

【Java】Math.random()

末鹿安然 提交于 2020-02-20 05:13:37
Math.Random()简介 Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的 左闭右开 区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。 for (int i = 0; i < 5; i++) { double num = Math.random(); System.out.println(num); } 结果如下: 0.991836137537863 0.11210420678832744 0.3349661025274727 0.6154826738190097 0.9783462209720709 Math.Random()简单应用 1、生成 m<= num <n 的随机数 (int)(Math.random()*(n-m)+m) 例如:2<=num<8 for (int i = 0; i < 5; i++) { int num = (int)(Math.random()*(8-2)+2); System.out.println(num); } 结果如下: 5 7 4 5 2 2、生成 m<= num <=n 的随机数 (int)Math.floor((Math.random()*(n-m+1)+m)) 例如:2<=num<=8 for (int i = 0; i < 5; i++

java包装类日期类随机数

你离开我真会死。 提交于 2020-02-18 07:17:18
StringBuffer类 1.支持可变长度 2.可以修改字符串 3.是线程安全的 4.效率低 StringBuilder类 1.支持可变长度 2.可以修改字符串 3.是线程不安全的 4.效率高 包装类 1.对基本数据类型做了封装,解决了基本数据类型的变量不能充当对象使用的问题。 eg: int --> Integer;double --> Double 2.拆箱和装箱(手动、自动) 1)装箱:基本数据类型转换为对应包装类 2)拆箱:包装类转化为基本数据类型 3)包装类本质上是一个对象,装箱时现在堆中new一个对象,再将基本数据类型对的值给该对象的value 4)一定不要使用== 或者!=,在包装类和基本数据类型之间进行比较,建议使用equals 5)当进行数学运算的时候,遇到包装类会自动拆箱,再对基本数据类型进行运算 3.基本数据类型与String类型转化 1)+“”:int a = 0;String b = a + “”; 2)String.valueof(基本数据类型变量) 4.String类型转化为基本数据类型 1)包装类.parseXXX(“字符串”); 2)eg:String age = “25”; int age1 = Integer.parseInt(age); System.out.println(age1); 日期类 1.Date 1)规则:yyyy-MM-dd

sklearn的train_test_split

淺唱寂寞╮ 提交于 2020-02-17 02:07:10
train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。 格式: X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.3, random_state=0) 参数解释 : train_data:被划分的样本特征集 train_target:被划分的样本标签 test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量 random_state:是随机数的种子。 随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。 随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则: 种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。 >>> import numpy as np >>> from sklearn.model_selection import train_test_split >>> X, y = np.arange(10).reshape((5, 2)), range(5)