2010-06-07 6 views
35

pourquoi n'existe-t-il pas? Je sais que je peux faire log (x, 2), mais log2 est vraiment commun, donc je suis un peu dérouté.log2 en module mathématique python

Oh, on dirait que c'est seulement défini dans C99, pas C90, je suppose que cela répond à ma question. Toujours semble un peu bête.

Répondre

45

Je pense que vous avez répondu à votre propre question. :-) Il n'y a pas log2(x) parce que vous pouvez faire log(x, 2). Comme le dit le Zen de Python (PEP 20), "il devrait y avoir une - et de préférence une seule - manière évidente de le faire."

Cela dit, log2 était considéré dans Issue3366 (faites défiler vers le bas pour les 3 derniers messages) qui a ajouté plusieurs autres fonctions mathématiques C99 au module math pour Python 2.7 et 3.2.

Édition: log2 a été reconsidéré dans Issue11888 et ajouté dans Python 3.3.

+17

Cela soulève la question, pourquoi 'log10' existe-t-il? –

+5

log10 est C89, donc il existe sur toutes les plates-formes communes, y compris Windows. Il est donc trivial pour Python d'ajouter un wrapper autour de lui. –

+1

Eh bien, assez juste. Je suppose que les gens aiment log10 assez pour l'inclure spécialement mais pas log2. On dirait que c'est en fait numpy, donc ça résout ça. –

3

Je ne suis pas sûr qu'il ya que vous voulez, mais:

- Du point de vue mathématique que vous pouvez faire pour exmaple Math.log (x) /math.log (2).

- Si l'entrée X est de type intégral et que vous attendez un résultat arrondi intégral, vous pouvez le faire plus rapidement avec un décalage vers la droite. Cela fonctionne avec la commande SHR, et sans taylor series + interpolation locale, qui est sous le capot des appels libc log().