GVKun编程网logo

大量乘以random()(Python)(python 大数相乘)

24

在这里,我们将给大家分享关于大量乘以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 大数相乘)

大量乘以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# Python 之内置 random 模块

Python 内置模块之 random

random 库是 Python 中生成随机数的标准库,包含的函数清单如下:

  • 基本随机函数:seedrandomgetstatesetstate
  • 扩展随机函数:randintgetrandbitsrandrangechoiceshufflesample
  • 分布随机函数:uniformtriangularbetavariateexpovariategammavariategausslognormvariatenormalvariatevonmisesvariateparetovariateweibullvariate
    发现单词 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 表示最大值,两头都是闭区间,也就是 startstop 都能被获取到。

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))

其它分布随机函数

以下都是生成随机数的方法,只是底层核心算法不同。
、、、、、、、。

  1. expovariate:生成一个 (0,∞) 之间的随机整数,指数分布;
  2. gammavariate:采用 gamma 分布;
  3. gauss:采用高斯(正太)分布;
  4. lognormvariate:对数正太分布;
  5. normalvariate:正太分布;
  6. vonmisesvariate:冯米赛斯分布;
  7. paretovariate:帕累托分布;
  8. weibullvariate:韦伯分布。

这篇博客的总结

本篇博客学习了 Python 中随机数相关的知识点,希望对你有所帮助。

Java Math.random()与Random.nextInt(int)

Java Math.random()与Random.nextInt(int)

是什么区别Math.random() * n和Random.nextInt(n)在那里n是一个整数?

os.urandom()和random之间有什么区别?

os.urandom()和random之间有什么区别?

在随机模块python页面(链接到此处)上,显示以下警告:

警告:
出于安全目的,不应使用此模块的伪随机数生成器。如果需要加密安全的伪随机数生成器,请使用os.urandom()或SystemRandom。

  • 那么os.urandom()和random之间有什么区别?

  • 一个比另一个更接近真正的随机性吗?

  • 在非加密实例中,安全随机是否会过大?

  • python中还有其他随机模块吗?

python 中的随机函数 random 的用法示例 random

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 模块方法说明

  1. random.random () 函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在 0.0~1.0 之间。
  2. random.uniform () 正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。
  3. random.randint () 随机生一个整数 int 类型,可以指定这个整数的范围,同样有上限和下限值,python random.randint。
  4. random.choice () 可以从任何序列,比如 list 列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。
  5. random.shuffle () 如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。
  6. 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等更多相关知识的信息可以在本站进行查询。

本文标签: