[Commentaire] de @matsulib (http://qiita.com/HigashinoSola/items/7514035a5dbaadbc5762#comment-84c5a9c6da4f027361ae). sympy.Mul est rapide car le cache est activé par défaut.
Créez au hasard 100 entiers entre 1 et 100.
import numpy as np
nums = [int(i) for i in np.random.randint(1, 100, 100)] #numpy.définir int64 sur int
Le sujet est le moyen le plus rapide de calculer le produit de «nums».
Lors de la recherche, il est souvent frappé d'utiliser «réduire».
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)
C'est devenu plus rapide avec ʻoperator.mul`.
numpy
Je ne suis pas sûr, mais il n'a pas été calculé correctement en raison d'un dépassement de capacité.
np.prod(nums)
0
sympy
C'est un favori. Il existe une version multipliée de «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)
Cependant, en fait, la barrière est que «sympy.Mul» est plus rapide.
%timeit sympy.Mul(*nums)
2.96 µs ± 39.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Quelle est la raison de l'existence de sypmy.prod
...
sympy.Mul (* nums)
est deux fois plus rapide que sympy.prod (nums)
!
Recommended Posts