我有一个问题,根据随机硬币翻转的结果,我必须从字符串中采样一个随机起始位置。如果这个随机位置的采样在字符串上是统一的,我想到了两种方法来做到这一点:一种使用 numpy.random 中的多项式,另一种使用 Python 标准库的简单 randint 函数。我对此进行了如下测试:
from numpy import *
from numpy.random import multinomial
from random import randint
import time
def use_multinomial(length, num_points):
probs = ones(length)/float(length)
for n in range(num_points):
result = multinomial(1, probs)
def use_rand(length, num_points):
for n in range(num_points):
rand(1, length)
def main():
length = 1700
num_points = 50000
t1 = time.time()
use_multinomial(length, num_points)
t2 = time.time()
print "Multinomial took: %s seconds" %(t2 - t1)
t1 = time.time()
use_rand(length, num_points)
t2 = time.time()
print "Rand took: %s seconds" %(t2 - t1)
if __name__ == '__main__':
main()
输出是:
多项式耗时:6.58072400093 秒兰德耗时:2.35189199448 秒
randint 似乎更快,但对我来说似乎仍然很慢。有没有一种矢量化的方法可以使用 numpy 或 scipy 让它变得更快?
谢谢。