To, co masz, powinno zadziałać, jeśli umieścisz nawiasy kwadratowe wokół „, 2” w math.log()wywołaniu. Próbowałeś tego?
martineau
5
ładne obliczenia entropii
Muhammad Alkarouri
math.log (wartość, podstawa)
Valentin Heinitz,
Odpowiedzi:
230
Dobrze to wiedzieć
ale pamiętaj również, że
math.logpobiera opcjonalny drugi argument, który pozwala określić podstawę:
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 () wywołuje funkcję w C frexp (), która po prostu pobiera i dostosowuje wykładnik.
Python frexp () zwraca krotkę (mantysa, wykładnik). Więc [1]dostaje część wykładniczą.
Dla potęg całkowitych 2 wykładnik jest o jeden większy, niż można by się spodziewać. Na przykład 32 jest przechowywane jako 0,5x2⁶. To wyjaśnia - 1powyższe. Działa również dla 1/32, która jest przechowywana jako 0,5x2⁻⁴.
Podłogi w kierunku ujemnej nieskończoności, więc log₂31 wynosi 4, a nie 5. log₂ (1/17) to -5, a nie -4.
Ciekawy. Czyli odejmujesz tam 1, ponieważ mantysa jest w zakresie [0,5, 1,0)? Gdybym mógł, dałbym temu jeszcze kilka pozytywnych głosów.
LarsH
1
Dokładnie tak, @LarsH. 32 jest przechowywane jako 0,5x2⁶, więc jeśli chcesz log₂32 = 5, musisz odjąć 1 . Dotyczy również 1/32, która jest przechowywana jako 0,5x2⁻⁴.
Bob Stein
16
Jeśli korzystasz z Pythona 3.4 lub nowszego, to ma już wbudowaną funkcję do obliczania log2 (x)
import math
'finds log base2 of x'
answer = math.log2(x)
Jeśli korzystasz ze starszej wersji Pythona, możesz to zrobić
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()
wywołaniu. Próbowałeś tego?Odpowiedzi:
Dobrze to wiedzieć
ale pamiętaj również, że
math.log
pobiera opcjonalny drugi argument, który pozwala określić podstawę:źródło
base
argument dodany w wersji 2.3, przy okazji.?
) jest dynamiczna introspekcja obiektów .float → float
math.log2(x)
float → int
math.frexp(x)
Jeśli potrzebujesz tylko części całkowitej z podstawy logu 2 liczby zmiennoprzecinkowej, wyodrębnienie wykładnika jest całkiem wydajne:
Python frexp () wywołuje funkcję w C frexp (), która po prostu pobiera i dostosowuje wykładnik.
Python frexp () zwraca krotkę (mantysa, wykładnik). Więc
[1]
dostaje część wykładniczą.Dla potęg całkowitych 2 wykładnik jest o jeden większy, niż można by się spodziewać. Na przykład 32 jest przechowywane jako 0,5x2⁶. To wyjaśnia
- 1
powyższe. Działa również dla 1/32, która jest przechowywana jako 0,5x2⁻⁴.Podłogi w kierunku ujemnej nieskończoności, więc log₂31 wynosi 4, a nie 5. log₂ (1/17) to -5, a nie -4.
int → int
x.bit_length()
Jeśli dane wejściowe i wyjściowe są liczbami całkowitymi, ta natywna metoda liczb całkowitych może być bardzo wydajna:
- 1
ponieważ 2ⁿ wymaga n + 1 bitów. Działa dla bardzo dużych liczb całkowitych, np2**10000
.Podłogi w kierunku ujemnej nieskończoności, więc log₂31 wynosi 4, a nie 5. log₂ (1/17) to -5, a nie -4.
źródło
Jeśli korzystasz z Pythona 3.4 lub nowszego, to ma już wbudowaną funkcję do obliczania log2 (x)
Jeśli korzystasz ze starszej wersji Pythona, możesz to zrobić
źródło
Korzystanie numpy:
źródło
http://en.wikipedia.org/wiki/Binary_logarithm
źródło
źródło
math.log
funkcję. Zobacz odpowiedź unutbu.Spróbuj tego ,
źródło
logbase2 (x) = log (x) / log (2)
źródło
W Pythonie 3 lub nowszym klasa matematyki ma następujące funkcje
lub ogólnie możesz użyć
math.log(x, base)
dla dowolnej bazy.źródło
log_base_2 (x) = log (x) / log (2)
źródło
Nie zapomnij, że log [podstawa A] x = log [podstawa B] x / log [podstawa B] A .
Więc jeśli masz tylko
log
(dla logarytmu naturalnego) ilog10
(dla logarytmu o podstawie 10), możesz użyćźródło