ランダムなコイントスの結果に応じて、文字列からランダムな開始位置をサンプリングする必要があるという問題があります。このランダムな位置のサンプリングが文字列全体で均一である場合、それを行うための 2 つのアプローチを考えました。これを次のようにテストしました。
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 を使用して、これをより高速にするためのベクトル化された方法はありますか?
ありがとう。