1
我有一個問題,根據隨機硬幣翻轉的結果,我必須從一個字符串中抽樣一個隨機起始位置。如果這個隨機位置的採樣在字符串上是一致的,我想到了兩種方法:一個使用numpy.random中的多項式,另一個使用Python標準lib的簡單randint函數。我測試了這個如下:使用numpy/scipy在Python中統一採樣整數
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?
謝謝。