Вы можете вычислить его намного быстрее, если используете мультиноминальное распределение:
import numpy as np
def roll_np(num_dice,num_faces):
return sum((np.array(range(num_faces))+1)*np.random.multinomial(num_dice,[1/float(num_faces)]*num_faces))
Время выполнения этой реализации не зависит от num_dice
.Я проверил это:
from time import time
t=time();roll_np(10000,6);print(time()-t)
34997
0.0005793571472167969
t=time();roll_np(10000,6);print(time()-t)
34938
0.0005676746368408203
t=time();roll_np(10000000,6);print(time()-t)
34996283
0.0006160736083984375
t=time();roll_np(10000000,6);print(time()-t)
34996047
0.000567913055419921