Базовое суммирование Python и встроенная функция суммыPython

Программы на Python
Anonymous
Базовое суммирование Python и встроенная функция суммы

Сообщение Anonymous »

Я пытаюсь протестировать некоторые алгоритмы на числах с плавающей запятой, используя асимптотическое разложение гармонической суммы: H_n = ln(n) + gamma + o(1), где гамма — это константа Эйлера-Машерони (приблизительно равна 0,5772156).
Прежде всего, я запрограммировал три простые функции, вычисляющие это суммирование более наивным способом:

Код: Выделить всё

def basic(n):
s = 0
for i in range(1, n + 1):
s += 1 / i
return s - math.log(n) - 0.577215664901532861

Код: Выделить всё

def with_sum(n):
s = sum(1 / i for i in range(1, n + 1))
return s - math.log(n) - 0.577215664901532861

Код: Выделить всё

def with_numpy_sum(n):
s = np.sum(1 / i for i in range(1, n + 1))
return s - math.log(n) - 0.577215664901532861
Я думал, что встроенная функция Python sum написана на C, а встроенная функция numpy np.sum был еще более оптимизирован.
Но, к моему удивлению, у меня получились следующие таймеры:

Код: Выделить всё

>>> N = 100000000
>>> timeit basic(N)
4.91 s ± 263 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>> timeit with_sum(N)
5.61 s ± 360 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>> timeit with_numpy_sum(N)
7.83 s ± 210 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
То, что я считал быстрым, оказывается медленнее...!
Кто-нибудь может это объяснить?Я видел аналогичный вопрос, но я не могу вычислить 1/i без цикла for...

Подробнее здесь: https://stackoverflow.com/questions/790 ... m-function

Вернуться в «Python»