[PYTHON] sympy.Mul ist viel schneller als sympy.prod

Nachtrag

[Kommentar] von @matsulib (http://qiita.com/HigashinoSola/items/7514035a5dbaadbc5762#comment-84c5a9c6da4f027361ae). sympy.Mul ist schnell, da der Cache standardmäßig aktiviert ist.


Erstellen Sie zufällig 100 Ganzzahlen zwischen 1 und 100.

import numpy as np
nums = [int(i) for i in np.random.randint(1, 100, 100)] #numpy.setze int64 auf int

Das Thema ist der schnellste Weg, um das Produkt von "nums" zu berechnen.

Mit Standardbibliothek

Bei der Suche wird häufig die Option "Reduzieren" verwendet.

from functools import reduce
from operator import mul
%timeit reduce(lambda x, y: x*y, nums)
11.7 µs ± 104 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit reduce(mul, nums)
6.71 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Mit operator.mul ging es schneller.

numpy

Ich bin mir nicht sicher, aber es wurde aufgrund eines Überlaufs nicht richtig berechnet.

np.prod(nums)
0

sympy

Es ist ein Favorit. Es gibt eine multiplizierte Version von "sum", "sympy.prod".

import sympy
%timeit sympy.prod(nums)
7.1 µs ± 50.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Tatsächlich besteht die Barriere jedoch darin, dass "sympy.Mul" schneller ist.

%timeit sympy.Mul(*nums)
2.96 µs ± 39.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Was ist der Grund für die Existenz von sypmy.prod ...

Fazit

sympy.Mul (* nums) ist mehr als doppelt so schnell wie sympy.prod (nums)!

Recommended Posts

sympy.Mul ist viel schneller als sympy.prod
@ Ist schneller als Punkt
[Kleine Geschichte] In Python ist i = i + 1 etwas schneller als i + = 1.
Schnellerer Python-Release-Zyklus!
[Memo für Python-Wettbewerbsprofi] Der LRU-Cache ist schneller als die Memokonvertierung im Programm