2010-06-07 14 views
35

perché non esiste?log2 in python math module

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

So che posso fare log (x, 2), ma log2 è molto comune, quindi sono un po 'sconcertato.

Oh, sembra che sia definito solo in C99, non in C90, credo che risponda alla mia domanda. Sembra ancora un po 'sciocco.

risposta

45

Penso che tu abbia risposto alla tua stessa domanda. :-) Non c'è log2(x) perché puoi fare log(x, 2). Come The Zen of Python (PEP 20) dice, "Ci dovrebbe essere uno - e preferibilmente solo un modo - ovvio per farlo."

Detto questo, log2 è stato considerato in Issue3366 (scorrere verso il basso per gli ultimi 3 messaggi) che ha aggiunto diverse altre funzioni matematiche C99 al modulo math per Python 2.7 e 3.2.

Modifica: log2 è stato riconsiderato in Issue11888 e aggiunto in Python 3.3.

+17

Questo fa sorgere la domanda, perché 'log10' esiste? –

+5

log10 è C89, quindi esiste su tutte le piattaforme comuni, incluso Windows. Quindi è banale per Python aggiungere un wrapper attorno ad esso. –

+1

Bene, abbastanza giusto. Immagino che persone come log10 siano abbastanza specifiche da includerle, ma non log2. Sembra che sia in realtà numpy, quindi questo risolve il problema. –

3

non sono sicuro che c'è che si vuole, ma:

- Dal punto di vista matematico si può fare per exmaple math.log (x) /math.log (2).

- Se l'ingresso X è di tipo integrale e si sta aspettando il risultato arrotondato integrale, è possibile farlo piuttosto velocemente con il cambio a destra. Funziona con il comando SHR e senza la serie di Taylor + interpolazione locale, che è sotto il cofano delle chiamate a libc log().