Lo que tiene debería funcionar si quita los corchetes alrededor del ", 2" en la math.log()llamada. ¿Lo has probado?
martineau
5
buen cálculo de entropía
Muhammad Alkarouri
math.log (valor, base)
Valentin Heinitz
Respuestas:
230
Es bueno saber eso
pero también sepa que
math.logtoma un segundo argumento opcional que le permite especificar la base:
In[22]:import math
In[23]: math.log?Type: builtin_function_or_method
BaseClass:<type 'builtin_function_or_method'>StringForm:<built-in function log>Namespace:InteractiveDocstring:
log(x[, base])-> the logarithm of x to the given base.If the base not specified, returns the natural logarithm (base e) of x.In[25]: math.log(8,2)Out[25]:3.0
Python frexp () llama a la función C frexp () que simplemente toma y ajusta el exponente.
Python frexp () devuelve una tupla (mantisa, exponente). Entonces [1]obtiene la parte del exponente.
Para potencias integrales de 2, el exponente es uno más de lo que cabría esperar. Por ejemplo, 32 se almacena como 0,5x2⁶. Esto explica lo - 1anterior. También funciona para 1/32 que se almacena como 0.5x2⁻⁴.
Pisos hacia el infinito negativo, por lo que log₂31 es 4 y no 5. log₂ (1/17) es -5 no -4.
Interesante. ¿Entonces estás restando 1 allí porque la mantisa está en el rango [0.5, 1.0)? Le daría a este algunos votos a favor más si pudiera.
LarsH
1
Exactamente @LarsH. 32 se almacena como 0.5x2⁶, así que si quieres log₂32 = 5, debes restar 1 . También es cierto para 1/32 que se almacena como 0.5x2⁻⁴.
Bob Stein
16
Si está en Python 3.4 o superior, entonces ya tiene una función incorporada para calcular log2 (x)
import math
'finds log base2 of x'
answer = math.log2(x)
Si tiene una versión anterior de Python, puede hacer esto
import math
'finds log base2 of x'
answer = math.log(x)/math.log(2)
In[1]:import numpy as np
In[2]: np.log2?Type: function
BaseClass:<type 'function'>StringForm:<function log2 at 0x03049030>Namespace:InteractiveFile: c:\python26\lib\site-packages\numpy\lib\ufunclike.py
Definition: np.log2(x, y=None)Docstring:Return the base 2 logarithm of the input array, element-wise.Parameters----------
x : array_like
Input array.
y : array_like
Optional output array with the same shape as`x`.Returns-------
y : ndarray
The logarithm to the base 2 of `x` element-wise.NaNs are returned where `x`is negative.SeeAlso--------
log, log1p, log10
Examples-------->>> np.log2([-1,2,4])
array([NaN,1.,2.])In[3]: np.log2(8)Out[3]:3.0
def lg(x, tol=1e-13):
res =0.0# Integer partwhile x<1:
res -=1
x *=2while x>=2:
res +=1
x /=2# Fractional part
fp =1.0while fp>=tol:
fp /=2
x *= x
if x >=2:
x /=2
res += fp
return res
math.log()
llamada. ¿Lo has probado?Respuestas:
Es bueno saber eso
pero también sepa que
math.log
toma un segundo argumento opcional que le permite especificar la base:fuente
base
argumento agregado en la versión 2.3, por cierto.?
) es la introspección dinámica de objetos .flotar → flotar
math.log2(x)
flotar → int
math.frexp(x)
Si todo lo que necesita es la parte entera de la base logarítmica 2 de un número de punto flotante, extraer el exponente es bastante eficiente:
Python frexp () llama a la función C frexp () que simplemente toma y ajusta el exponente.
Python frexp () devuelve una tupla (mantisa, exponente). Entonces
[1]
obtiene la parte del exponente.Para potencias integrales de 2, el exponente es uno más de lo que cabría esperar. Por ejemplo, 32 se almacena como 0,5x2⁶. Esto explica lo
- 1
anterior. También funciona para 1/32 que se almacena como 0.5x2⁻⁴.Pisos hacia el infinito negativo, por lo que log₂31 es 4 y no 5. log₂ (1/17) es -5 no -4.
int → int
x.bit_length()
Si tanto la entrada como la salida son números enteros, este método nativo de números enteros podría ser muy eficiente:
- 1
porque 2ⁿ requiere n + 1 bits. Funciona para números enteros muy grandes, por ejemplo2**10000
.Pisos hacia el infinito negativo, por lo que log₂31 es 4 y no 5. log₂ (1/17) es -5 no -4.
fuente
Si está en Python 3.4 o superior, entonces ya tiene una función incorporada para calcular log2 (x)
Si tiene una versión anterior de Python, puede hacer esto
fuente
Usando numpy:
fuente
http://en.wikipedia.org/wiki/Binary_logarithm
fuente
fuente
math.log
función. Vea la respuesta de unutbu.Prueba esto ,
fuente
logbase2 (x) = log (x) / log (2)
fuente
En python 3 o superior, la clase de matemáticas tiene las siguientes funciones
o generalmente puede usarlo
math.log(x, base)
para cualquier base que desee.fuente
log_base_2 (x) = log (x) / log (2)
fuente
No olvide que log [base A] x = log [base B] x / log [base B] A .
Entonces, si solo tiene
log
(para registro natural) ylog10
(para registro de base 10), puede usarfuente