[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.
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
...
sympy.Mul (* nums)
ist mehr als doppelt so schnell wie sympy.prod (nums)
!