2010-06-07 12 views
35

¿por qué no existe?log2 en el módulo matemático python

import math 
[x for x in dir(math) if 'log' in x] 
>>> ['log', 'log10', 'log1p'] 

Yo sé que puedo hacer log (x, 2), pero log2 es muy común, por lo que estoy un poco desconcertado.

Oh, parece que solo está definido en C99, no en C90, supongo que eso responde mi pregunta. Todavía parece un poco tonto.

Respuesta

45

Creo que ha respondido a su propia pregunta. :-) No hay log2(x) porque puede hacer log(x, 2). Como dice The Zen of Python (PEP 20): "Debería haber una, y preferiblemente solo una, forma obvia de hacerlo".

Dicho esto, se consideró log2 en Issue3366 (desplácese hacia abajo hasta los 3 últimos mensajes), que añade varias otras funciones matemáticas C99 al módulo math para Python 2.7 y 3.2.

Editar: log2 se reconsideró en Issue11888 y se agregó en Python 3.3.

+17

Eso plantea la pregunta, ¿por qué 'log10' existe? –

+5

log10 es C89, por lo que existe en todas las plataformas comunes, incluido Windows. Por lo tanto, es trivial que Python agregue un contenedor alrededor de él. –

+1

Bueno, es suficiente. Supongo que a la gente le gusta log10 lo suficiente como para incluirlo especialmente pero no log2. Parece que en realidad está en numpy, así que eso resuelve eso. –

3

No estoy seguro de que no es lo que desea, pero:

- Desde el punto de vista matemático que puede hacer por exmaple Math.log (x) /math.log (2).

- Si la entrada X tiene tipo integral y está esperando el resultado redondeado integral, puede hacerlo bastante rápido con el desplazamiento hacia la derecha. Esto funciona con el comando SHR, y sin la serie taylor + interpolación local, que está bajo el capó de las llamadas a libc log().