sympy.Mul est beaucoup plus rapide que sympy.prod

Postscript

[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».

Avec bibliothèque standard

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 ...

Conclusion

sympy.Mul (* nums) est deux fois plus rapide que sympy.prod (nums)!

Recommended Posts

sympy.Mul est beaucoup plus rapide que sympy.prod
@ Est plus rapide que dot
[Petite histoire] En Python, i = i + 1 est légèrement plus rapide que i + = 1.
Le cycle de publication de Python est plus rapide!
[Memo for Python competition professional] Le cache LRU est plus rapide que la conversion de mémo dans le programme