在这里,我们将给大家分享关于大量乘以random的知识,让您更了解的本质,同时也会涉及到如何更有效地#小手一抬学Python#Python之内置random模块、JavaMath.random()与R
在这里,我们将给大家分享关于大量乘以random的知识,让您更了解的本质,同时也会涉及到如何更有效地#小手一抬学Python# Python 之内置 random 模块、Java Math.random()与Random.nextInt(int)、os.urandom()和random之间有什么区别?、python 中的随机函数 random 的用法示例 random的内容。
本文目录一览:- 大量乘以random()(Python)(python 大数相乘)
- #小手一抬学Python# Python 之内置 random 模块
- Java Math.random()与Random.nextInt(int)
- os.urandom()和random之间有什么区别?
- python 中的随机函数 random 的用法示例 random
大量乘以random()(Python)(python 大数相乘)
问题: 生成大型二进制字符串(长度超过2000)。快速执行此操作,因为此generateRandom()函数在算法中将被调用300,000次。
尝试的解决方案: 生成3或4个二进制数并将它们加在一起500次。这太慢了。
一次调用random.random()并将其乘以一个巨大的数字。一次转换为二进制并完成。这适用于较小的数字,但是因为二进制字符串必须具有一定的长度,所以要转换为二进制的数字必须确实很大(2
** len(binString))。
当前代码(适用于较小的数字):
binaryRepresentation = ''''binaryRepresentation += bin(int(random.random() * (2 ** binLength)))[2:].zfill(binLength)
我需要帮助解决的错误: 此调用会引发带有大量数字的“ long
int太大,无法转换为float”。有没有办法使整体算法更有效或使大量算法可转换为浮点数?
谢谢!
答案1
小编典典从JF Sebastian的答案到二进制字符串(其中带有0
和的字符串1
):
>>> import random>>> r = random.SystemRandom()>>> bin(r.getrandbits(2000))[2:].zfill(2000)''00010110001101100011000011001011011000010001010111000001111001001111010110010110011011110011101101100001111000011111010110100110011011110011111110010111111001110110011011011111011101000010101001001000100010001011011100011101100101010110001101101100100000001001010001101100110001100001101101010010001000010010010101100110100000001001001101000110001011111111111010011111111011001000100011001011011100010100010000010011100100011111011110111101010001001111011010101101010000110110010011000101111110000101001111100111111101101101110001100111011110011001000110110011101001010111100110000111000110011010000000111011001011100000100100111011110111101001110001110010010101100110000111001011100101111110100000100101011000110100111111001100111001000000111010000000101001111011111101111111101101011010010001101101101010011000100101000111000100100011010100111101111010001011110100100011111101101000111011100010000111000111110100001100111010001001010100001010111100001001010110010010100010011010010010011000000011010111110001100001100110101111011100010100100101000101000111110011111011011011111101011001001111010110000101100011111000111010100001000000101111011010011010011101011110000101011011110001111111101100000100000110111100011010110000111110110010100010010111111110010000000100001011110011100001001110110111100001101000011101011011101110001001001110011111111010001000100011010000110011000000000011111011011011101011010010001000101001011111110110000011000000000010101101111100011001010011100010010110111011001001011011010101111011101000001000011110010011111000011001110000100100111010000011100111110101110111010010101110010111100011111001101010010010000001010110011110001110010011011001110011000010010111111100101101100110111100001101100001100000101110000000011111010011000010000000011001101000001001000101001010100001110001011111110100110111000101011101111110010110001111111010100000100011011110011100010000000101001011100000010101101110110001110010111010000111101110100001100101000101010000110111011001001011''>>> bin(r.getrandbits(2000))[2:].zfill(2000)''11111011011010000011111101101101001110101011100110100011111011101101111100110001000110110100101010101000110010000101010100011111100111100010000001011011101100011101000001100101000101000010010000001111110101010011001110001001010011000011010100011111110111110010100000111011000000110000100000000110101101101111001101100000010010000100101001111100101010011101011010111110010001111111100101011110001101100111010010101110111000001000100101111011010001111001001010010000011100111101101101111101111010101100001000110011100110010110010101101001011000010101011111010010111000000100101100000100000010010000001000000001110010010100100111001011011111100111111001100000111111110011100001000111111110110001000010010110101100100001000001011110110100000111010101100111111010011111011111011000100101010111111000110111001001100011101101001000100110011001011101100010011010101111000011011111110001010110100100100001010100100100110101100111011110101001001111000010001101001010111111110011110111011111010001110011001000000100000101100001001100101000010011001101001110000101100000110000110101110011000010111110100100100100110010111110011101001000100111110011001101010000101100010011110100100110000111010111001000001101010101000001111001110010111000000101111101000110100101101000100000101100100110111101100010011110111011010111000111111100001110000100111001110001010101111000111100000011111111111110110100011000000111010100111011011100100010110100010110001111010110010100101111010111101110011010110100100010001001001110010110100111010010111001011101100000010011000110011011011010001100010000000010110011101101000111101000011101100001010001010001010111111110101100001110010000001010000000011000000000101111001001100100010110010000000101001010011110110111101111001110001001110111101011111111010101101011101010010111101000000010000101010100000101111010011010001001001101000001001011010110000000000111010001111001110100110000100011110100110110010011000111110100011000110001100001101101001010110001001001001101000011011101001010''>>> bin(r.getrandbits(2000))[2:].zfill(2000)''00100010111111011100001001000010100100101000100010101010100001011100101010100000000011111000001001011101010010010000101111111001101101100101011011001011110001001111101011101000101101000001000000110010011001110010101100101000011111001111111011011010001010010000011000000010011001101000100101000001001101001100010100000100100110000010110101011101011111010000010110011001101010010010000111001101101101001001100101111001101110111111111000011000001011011100111010011101001100011101011001110010111101011111010100101101010001011011001001010001111011100100101100100011111010010011110010011101100101001100111011011110011101010101010011001100000100110000001001111001111010011110110110001100110111011011111001110101000100100000011101001100111001100010001101010110000110010101010100011011101101010010100011111100001100100011010111000001011000101110100001111111001001111111101001000000011110110001010101001110110011000010101011010111111011010000011000000111110001110111111110110001110101011000010101001111110111101101010000111000011001111110101000001000011110000101011011001001000100010000110000110011100000100110100101011010011000110001010000101001110101111000110101001010010101000100011010101001110101101111010010101000011111101110110100101000110011010100010110110101010111001010110111011000000010001000110010011000011011110101101000111111101110100100011100000011110100000110111001001101110000011001101101011001000000101001110110011101111111010000000101111011100011010110111110000000001110101101100001001000001010000100101001111110110101000000101101111010010110000111101111011111100001111010001000100110111011010100110111011101011110001001001010100010101011001100100110101101111010011110001010011110000100100011101100101000000001011001010100101010011000011000100001011010010001010100001110101101100000010101011111010011000000000100100000000001011110101011101100101100010110101000111001010000001011000010001111101011111000011100101101110111110000011001000001101010001010000111001100101100111000111000001000000000''
使用此基准:
import randomimport timedef run(n): r = random.SystemRandom() for i in xrange(n): if i%30000 == 0: print i bin(r.getrandbits(2000))[2:].zfill(2000)s = time.time()run(300000)e = time.time()print "Took %.2fs" % (e-s,)
结果是 Took 12.32s
仅获取随机位而不进行任何字符串转换(仅r.getrandbits(2000)
)就需要花费时间7.77s
,因此,如果您可以找到一种将随机位用作a的方法,long
那么您可以节省一些时间。
os.urandom(250)
改用(无需额外处理)重新运行基准测试仅需3.59s
,因此这似乎是最快的选择。
#小手一抬学Python# Python 之内置 random 模块
Python 内置模块之 random
random 库是 Python 中生成随机数的标准库,包含的函数清单如下:
- 基本随机函数:
seed
、random
、getstate
、setstate
; - 扩展随机函数:
randint
、getrandbits
、randrange
、choice
、shuffle
、sample
; - 分布随机函数:
uniform
、triangular
、betavariate
、expovariate
、gammavariate
、gauss
、lognormvariate
、normalvariate
、vonmisesvariate
、paretovariate
、weibullvariate
。
发现单词variate
出现频率比较高,该但是是变量的意思。
基本随机函数
seed 与 random 函数
seed 函数初始化一个随机种子,默认是当前系统时间。
random 函数 生成一个 [0.0,1.0) 之间的随机小数 。
具体代码如下:
import random
random.seed(10)
x = random.random()
print(x)
其中需要说明的是 random.seed
函数, 通过 seed 函数 可以每次生成相同的随机数,例如下述代码:
import random
random.seed(10)
x = random.random()
print(x)
random.seed(10)
y = random.random()
print(y)
在不同的代码上获取到的值是不同的,但是 x 与 y 是相同的。
0.5714025946899135
0.5714025946899135
getstate() 和 setstate(state)
getstate
函数用来记录随机数生成器的状态,setstate
函数用来将生成器恢复到上次记录的状态。
# 记录生成器的状态
state_tuple = random.getstate()
for i in range(4):
print(random.random())
print("*"*10)
# 传入参数后恢复之前状态
random.setstate(state_tuple)
for j in range(4):
print(random.random())
输出的随机数两次一致。
0.10043296140791758
0.6183668665504062
0.6964328590693109
0.6702494141830372
**********
0.10043296140791758
0.6183668665504062
0.6964328590693109
0.6702494141830372
扩展随机函数
random 扩展随机函数有如下几个:
randint`、`getrandbits`、`randrange`、`choice`、`shuffle`、`sample
randint 和 randrange
randint
生成一个 [x,y]
区间之内的整数。 randrange
生成一个 [m,n)
区间之内以 k
为步长的随机整数。
测试代码如下:
x = random.randint(1,10)
print(x)
y = random.randrange(1,10,2)
print(y)
这两个函数比较简单,randint
函数原型如下:
random.randint(start,stop)
参数 start
表示最小值,参数 stop
表示最大值,两头都是闭区间,也就是 start
和 stop
都能被获取到。
randrange
函数原型如下:
random.randrange(start,stop,step)
如果函数调用时只有一个参数,默认是从 0 到该参数值,该函数与 randint
区别在于,函数是左闭右开,最后一个参数是步长。
查阅效果,可以复制下述代码运行:
for i in range(3):
print("*"*20)
print(random.randrange(10))
print(random.randrange(5,10))
print(random.randrange(5,100,5))
getrandbits(k) 和 choice(seq)
getrandbits
生成一个 k 比特长的随机整数,实际输出的是 k 位二进制数转换成的十进制数。 choice
从序列中随机选择一个元素。
x = random.getrandbits(5)
print(x)
# 生成的长度是 00000-11111
getrandbits(k)
函数可以简单描述如下:输出一个 $\[0,2^k-1\]$ 范围内一个随机整数,k
表示的是 2 进制的位数。
choice
就比较简单了,从列表中返回一个随机元素。
import random
my_list = ["a", "b", "c"]
print(random.choice(my_list))
shuffle(seq) 和 sample(pop,k)
shuffle
函数用于将序列中的元素随机排序,并且原序列被修改。 sample
函数用于从序列或者集合中随机选择 k 个选择,原序列不变。
my_list = [1,2,3,4,5,6,7,8,9]
random.shuffle(my_list)
print(my_list)
shuffle
函数只能用于可变序列,不可变序列(如元组)会出现错误。
my_list = ["梦想", "橡皮擦", 1, 2, [3, 4]]
print(my_list)
ls = random.sample(my_list, 4)
print(ls)
分布随机函数
该部分涉及的比较多,重点展示重要和常见的一些函数。
uniform(a,b) 、betavariate 和 triangular 函数
uniform
生成一个 [a,b]
之间的随机小数,采用等概率分布。 betavariate
生成一个 [0,1]
之间的随机小数,采用 beta
分布。 triangular
生成一个 [low,high]
之间的随机小数,采用三角分布。
在使用 uniform
时候需要注意,如果 a<b,那么生成一个 b-a 之间的小数。
for i in range(3):
print(random.uniform(4, 1))
其它分布随机函数
以下都是生成随机数的方法,只是底层核心算法不同。
、、、、、、、。
expovariate
:生成一个(0,∞)
之间的随机整数,指数分布;gammavariate
:采用 gamma 分布;gauss
:采用高斯(正太)分布;lognormvariate
:对数正太分布;normalvariate
:正太分布;vonmisesvariate
:冯米赛斯分布;paretovariate
:帕累托分布;weibullvariate
:韦伯分布。
这篇博客的总结
本篇博客学习了 Python 中随机数相关的知识点,希望对你有所帮助。
Java Math.random()与Random.nextInt(int)
是什么区别Math.random() * n和Random.nextInt(n)在那里n是一个整数?
os.urandom()和random之间有什么区别?
在随机模块python页面(链接到此处)上,显示以下警告:
警告:
出于安全目的,不应使用此模块的伪随机数生成器。如果需要加密安全的伪随机数生成器,请使用os.urandom()或SystemRandom。
-
那么os.urandom()和random之间有什么区别?
-
一个比另一个更接近真正的随机性吗?
-
在非加密实例中,安全随机是否会过大?
-
python中还有其他随机模块吗?
python 中的随机函数 random 的用法示例 random
篇文章主要介绍了 python 中的随机函数 random 的用法示例,详细的介绍了 python 随机函数 random 的用法和实例。
一、random 模块简介
Python 标准库中的 random 函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。
二、random 模块重要函数
1 、random () 返回 0<=n<1 之间的随机实数 n;
2 、choice (seq) 从序列 seq 中返回随机的元素;
import random
a = random.choice([1, 2, 3, 4])
print(a)
3 、getrandbits (n) 以长整型形式返回 n 个随机位;
4 、shuffle (seq [, random]) 原地指定 seq 序列;
5 、sample (seq, n) 从序列 seq 中选择 n 个随机且独立的元素;
三、random 模块方法说明
- random.random () 函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在 0.0~1.0 之间。
- random.uniform () 正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。
- random.randint () 随机生一个整数 int 类型,可以指定这个整数的范围,同样有上限和下限值,python random.randint。
- random.choice () 可以从任何序列,比如 list 列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。
- random.shuffle () 如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。
- random.sample () 可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。
四、需要导入 random 模块
1、random.random
random.random () 用于生成一个 0 到 1 的随机符小数: 0 <= n < 1.0
random.random()
2、random.uniform
random.uniform 的函数原型为:random.uniform (a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果 a > b,则生成的随机数 n: a <= n <= b。如果 a <b, 则 b <= n <= a。
random.uniform(1, 10)
3、random.randint
random.randint () 的函数原型为:random.randint (a, b),用于生成一个指定范围内的整数。其中参数 a 是下限,参数 b 是上限,生成的随机数 n: a <= n <= b
random.randint(10, 100)
4、random.randrange
random.randrange 的函数原型为:random.randrange ([start], stop [, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange (10, 100, 2),结果相当于从 [10, 12, 14, 16, ... 96, 98] 序列中获取一个随机数。random.randrange (10, 100, 2) 在结果上与 random.choice (range (10, 100, 2) 等效。
随机选取 0 到 100 间的偶数:
import random
random.randrange(0, 101, 2)
5、random.choice
random.choice 从序列中获取一个随机元素。其函数原型为:random.choice (sequence)。参数 sequence 表示一个有序类型。这里要说明 一下:sequence 在 python 不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于 sequence。有关 sequence 可以查看 python 手册数据模型这一章。
random.choice(''abcdefg&#%^*f'') #随机字符
''d''
random.choice ( [''apple'', ''pear'', ''peach'', ''orange'', ''lemon''] ) #随机选取字符串:
''lemon''
6、random.shuffle
random.shuffle 的函数原型为:random.shuffle (x [, random]),用于将一个列表中的元素打乱。如:
p = ["Python", "is", "powerful", "simple", "and so on..."]
random.shuffle(p)
print p
#结果(因为随机,所以你的结果可能不一样。)
#[''powerful'', ''simple'', ''is'', ''Python'', ''and so on...'']
p = ["Python", "is", "powerful", "simple", "and so on..."]
7、random.sample
random.sample 的函数原型为:random.sample (sequence, k),从指定序列中随机获取指定长度的片断。sample 函数不会修改原有序列。 如果 k 大于 sequence 元素个数的话会报错。
random 用法:random (x); // 注释:x 是个正整数
即可随机产生 0~x 之间的一切整数。而且它是一个函数,不能单独使用。
如 a:=random (100);就是随机产生 1 个 0~100 之间的数赋给变量 a;
但是如果只用 random 的话不太好。
因为 random 函数是随机一个数,然后你再次 random 的时候还是产生那个数。
今天关于大量乘以random和的介绍到此结束,谢谢您的阅读,有关#小手一抬学Python# Python 之内置 random 模块、Java Math.random()与Random.nextInt(int)、os.urandom()和random之间有什么区别?、python 中的随机函数 random 的用法示例 random等更多相关知识的信息可以在本站进行查询。
本文标签: