问题:生成大型二进制字符串(长度2000+)。快做,因为这个generateRandom()函数在算法中将被调用300000次。在
尝试的解决方案:生成3或4个二进制数并将它们相加500次。这太慢了。在
打一个电话给随机。随机()再乘以一个很大的数。转换成二进制一次就可以了。这适用于较小的数字,但由于二进制字符串必须具有一定的长度,因此要转换为二进制的数字必须非常大(2**len(binString))。在
当前代码(适用于较小的数字):
binaryRepresentation = ''
binaryRepresentation += bin(int(random.random() * (2 ** binLength)))[2:].zfill(binLength)
我需要帮助修复的错误:此调用抛出一个“long int too large to convert to float”,其中包含大量数字。有没有一种方法可以使整个算法更有效,或者使这个大的数能够转换成一个浮点数?在
谢谢你!
random.randrange
真的太慢了吗?让我们看看它到底有多慢。在对于选择6亿随机位来说,10秒似乎不是一个荒谬的时间。所以也许你可以多说一下你的速度要求。这真的太慢了吗?在
从J.F.Sebastian对二进制字符串(其中包含
0
和1
字符的字符串)的回答:根据这个基准:
^{pr2}$结果是
Took 12.32s
不进行任何字符串转换就得到随机位(只有
r.getrandbits(2000)
)就花了7.77s
,所以如果你能找到一种将随机位用作long
的方法,那么你可以节省一些时间。在使用
os.urandom(250)
重新运行基准测试(无需额外处理)只需3.59s
,因此这似乎是最快的选择。在衡量它是否足够快,以你的目的,“随机性”可能会减少你称之为:^{} 。它产生一个二进制字符串aka bytes。在
为了避免“long int too large To convert To float”错误,不要使用float。在
如果需要一个带有
k
随机位的整数而不是二进制字符串:要获取字符串“0”和“1”,请执行以下操作:
^{pr2}$注意:如果不使用
getrandbits
,则不能将randint/randrange
用于大数:b2a逯宾
^{} extension 允许直接从bytestrings创建二进制字符串(“01”),而无需创建中间的Python整数。它比纯Python类似物快3-20倍:
用法:
相关问题 更多 >
编程相关推荐