Я запускаю выборочное моделирование python, чтобы предсказать взвешенные и регулярные кости. Я хотел бы использовать numba, чтобы ускорить мой сценарий, но я получаю сообщение об ошибке:
<timed exec>:6: NumbaWarning:
Compilation is falling back to object mode WITH looplifting enabled because Function "roll" failed type inference due to: Untyped global name 'sum': cannot determine Numba type of <class 'builtin_function_or_method'>
File "<timed exec>", line 9:
<source missing, REPL/exec in use?>
Вот мой оригинальный код: есть ли другой тип выражения numba, который я могу использовать вместо этого? Сейчас я тестирую, используя ввод 2500 рулонов; Я хочу уменьшить это до 4 секунд (сейчас это 8,5 секунд).
%%time
from numba import jit
import random
import matplotlib.pyplot as plt
import numpy
@jit
def roll(sides, bias_list):
assert len(bias_list) == sides, "Enter correct number of dice sides"
number = random.uniform(0, sum(bias_list))
current = 0
for i, bias in enumerate(bias_list):
current += bias
if number <= current:
return i + 1
no_of_rolls = 2500
weighted_die = {}
normal_die = {}
#weighted die
for i in range(no_of_rolls):
weighted_die[i+1]=roll(6,(0.15, 0.15, 0.15, 0.15, 0.15, 0.25))
#regular die
for i in range(no_of_rolls):
normal_die[i+1]=roll(6,(0.167, 0.167, 0.167, 0.167, 0.167, 0.165))
plt.bar(*zip(*weighted_die.items()))
plt.show()
plt.bar(*zip(*normal_die.items()))
plt.show()