Was Sie haben, sollte funktionieren, wenn Sie die eckigen Klammern um die ", 2" im math.log()Anruf entfernen. Hast du es versucht?
Martineau
5
schöne Entropieberechnung
Muhammad Alkarouri
math.log (Wert, Basis)
Valentin Heinitz
Antworten:
230
Das ist gut zu wissen
Sie müssen aber auch wissen, dass
math.logein optionales zweites Argument erforderlich ist, mit dem Sie die Basis angeben können:
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 () gibt ein Tupel (Mantisse, Exponent) zurück. So [1]bekommt der Exponententeil.
Für ganzzahlige Potenzen von 2 ist der Exponent eins mehr als Sie vielleicht erwarten. Zum Beispiel wird 32 als 0,5x2⁶ gespeichert. Dies erklärt das - 1Obige. Funktioniert auch für 1/32, das als 0,5x2⁻⁴ gespeichert ist.
Böden in Richtung negativer Unendlichkeit, also ist log₂31 4 nicht 5. log₂ (1/17) ist -5 nicht -4.
Interessant. Sie subtrahieren dort also 1, weil die Mantisse im Bereich [0,5, 1,0] liegt? Ich würde diesem noch ein paar Gegenstimmen geben, wenn ich könnte.
LarsH
1
Genau richtig @LarsH. 32 wird als 0,5x2⁶ gespeichert. Wenn Sie also log₂32 = 5 möchten, müssen Sie 1 subtrahieren . Gilt auch für 1/32, das als 0,5x2⁻⁴ gespeichert ist.
Bob Stein
16
Wenn Sie mit Python 3.4 oder höher arbeiten, verfügt es bereits über eine integrierte Funktion zum Berechnen von log2 (x).
import math
'finds log base2 of x'
answer = math.log2(x)
Wenn Sie eine ältere Version von Python verwenden, können Sie dies tun
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
Zusätzliche Punkte für einen Algorithmus, der angepasst werden kann, um im Gegensatz zu int (math.log (x, 2)) immer den richtigen ganzzahligen Teil anzugeben
user12861
6
>>>def log2( x ):...return math.log( x )/ math.log(2)...>>> log2(2)1.0>>> log2(4)2.0>>> log2(8)3.0>>> log2(2.4)1.2630344058337937>>>
math.log()
Anruf entfernen. Hast du es versucht?Antworten:
Das ist gut zu wissen
Sie müssen aber auch wissen, dass
math.log
ein optionales zweites Argument erforderlich ist, mit dem Sie die Basis angeben können:quelle
base
Argument in Version 2.3 hinzugefügt, übrigens.?
) ist die dynamische Objektinspektion .float → float
math.log2(x)
float → int
math.frexp(x)
Wenn Sie nur den ganzzahligen Teil der Protokollbasis 2 einer Gleitkommazahl benötigen, ist das Extrahieren des Exponenten ziemlich effizient:
Python frexp () ruft die C-Funktion frexp () auf, die nur den Exponenten erfasst und optimiert .
Python frexp () gibt ein Tupel (Mantisse, Exponent) zurück. So
[1]
bekommt der Exponententeil.Für ganzzahlige Potenzen von 2 ist der Exponent eins mehr als Sie vielleicht erwarten. Zum Beispiel wird 32 als 0,5x2⁶ gespeichert. Dies erklärt das
- 1
Obige. Funktioniert auch für 1/32, das als 0,5x2⁻⁴ gespeichert ist.Böden in Richtung negativer Unendlichkeit, also ist log₂31 4 nicht 5. log₂ (1/17) ist -5 nicht -4.
int → int
x.bit_length()
Wenn sowohl Eingabe als auch Ausgabe Ganzzahlen sind, kann diese native Ganzzahlmethode sehr effizient sein:
- 1
weil 2ⁿ n + 1 Bits benötigt. Funktioniert für sehr große ganze Zahlen, z2**10000
.Böden in Richtung negativer Unendlichkeit, also ist log₂31 4 nicht 5. log₂ (1/17) ist -5 nicht -4.
quelle
Wenn Sie mit Python 3.4 oder höher arbeiten, verfügt es bereits über eine integrierte Funktion zum Berechnen von log2 (x).
Wenn Sie eine ältere Version von Python verwenden, können Sie dies tun
quelle
Verwenden von numpy:
quelle
http://en.wikipedia.org/wiki/Binary_logarithm
quelle
quelle
math.log
Funktion integriert. Siehe die Antwort von unutbu.Versuche dies ,
quelle
logbase2 (x) = log (x) / log (2)
quelle
In Python 3 oder höher hat die Matheklasse die folgenden Funktionen
oder Sie können im Allgemeinen
math.log(x, base)
für jede Basis verwenden, die Sie möchten.quelle
log_base_2 (x) = log (x) / log (2)
quelle
Vergessen Sie nicht, dass log [Basis A] x = log [Basis B] x / log [Basis B] A. .
Wenn Sie also nur
log
(für natürliches Protokoll) undlog10
(für Basis-10-Protokoll) haben, können Sie verwendenquelle