Это распространенная ошибка, похожая на ожидание, что такие вещи, как np.exp()
, будут работать быстрее, чем от модуля math
.Это не цель таких функций.Научный стек (NumPy
, Pandas
, SciPy
и другие) касается векторизованных подходов к массивам, а не отдельных значений.
from math import factorial
factorial([20, 20, 20])
Это даст TypeError: an integer is required (got type list)
Но:
from scipy.special import factorial
factorial([20, 20, 20])
Будет вычислять факториал для всего списка, давая:
array([2.43290201e+18, 2.43290201e+18, 2.43290201e+18])
Если вы поместили вычисление math.factorial
в цикл for
, чтобы охватить несколько элементовв списке он очень быстро отстает по времени от векторизованного подхода (что было бы еще быстрее, если бы вы сначала указали массив NumPy, а не список)