То, что у вас есть, должно сработать, если вы снимите квадратные скобки вокруг ", 2" в math.log()вызове. Ты это пробовал?
Мартино
5
хороший расчет энтропии
Мухаммад Алькарури
math.log (значение, основание)
Валентин Хайниц 07
Ответы:
230
Приятно знать, что
но также знайте, что
math.logпринимает необязательный второй аргумент, который позволяет вам указать базу:
In[22]:import mathIn[23]: math.log?Type: builtin_function_or_methodBaseClass:<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
Что это '?' синтаксис? Я не могу найти на это ссылку.
wap26
17
@ wap26: Выше я использую интерактивный интерпретатор IPython . Одной из его функций (доступ к которой осуществляется с помощью ?) является самоанализ динамического объекта .
Для целых степеней двойки показатель степени на единицу больше, чем вы могли ожидать. Например, 32 сохраняется как 0,5x2⁶. Это объясняет - 1сказанное выше. Также работает для 1/32, которое хранится как 0,5x2⁻⁴.
Этажи стремятся к отрицательной бесконечности, поэтому log₂31 равно 4, а не 5. log₂ (1/17) равно -5, а не -4.
Интересный. Значит, вы вычитаете 1, потому что мантисса находится в диапазоне [0,5, 1,0)? Я бы дал этому еще несколько голосов, если бы мог.
LarsH
1
Совершенно верно @LarsH. 32 хранится как 0,5x2⁶, поэтому, если вы хотите, чтобы log₂32 = 5, вам нужно вычесть 1 . Также верно для 1/32, который сохраняется как 0,5x2⁻⁴.
Боб Штайн,
16
Если вы используете python 3.4 или выше, то он уже имеет встроенную функцию для вычисления log2 (x).
import math'finds log base2 of x'
answer = math.log2(x)
Если вы используете более старую версию python, вы можете сделать это так
import math'finds log base2 of x'
answer = math.log(x)/math.log(2)
In[1]:import numpy as npIn[2]: np.log2?Type: functionBaseClass:<type 'function'>StringForm:<function log2 at 0x03049030>Namespace:InteractiveFile: c:\python26\lib\site-packages\numpy\lib\ufunclike.pyDefinition: np.log2(x, y=None)Docstring:Return the base 2 logarithm of the input array, element-wise.Parameters----------
x : array_likeInput array.
y : array_likeOptional output array with the same shape as`x`.Returns-------
y : ndarrayThe logarithm to the base 2 of `x` element-wise.NaNs are returned where `x`is negative.SeeAlso--------
log, log1p, log10Examples-------->>> 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 *= xif x >=2:
x /=2
res += fpreturn res
math.log()
вызове. Ты это пробовал?Ответы:
Приятно знать, что
но также знайте, что
math.log
принимает необязательный второй аргумент, который позволяет вам указать базу:источник
base
аргумент добавлен в версии 2.3, кстати.?
) является самоанализ динамического объекта .плавать → плавать
math.log2(x)
float → int
math.frexp(x)
Если все, что вам нужно, это целая часть логарифмической базы 2 числа с плавающей запятой, извлечение экспоненты довольно эффективно:
Python frexp () вызывает функцию frexp () C, которая просто захватывает и настраивает показатель степени.
Python frexp () возвращает кортеж (мантисса, экспонента). Так
[1]
получается экспоненциальная часть.Для целых степеней двойки показатель степени на единицу больше, чем вы могли ожидать. Например, 32 сохраняется как 0,5x2⁶. Это объясняет
- 1
сказанное выше. Также работает для 1/32, которое хранится как 0,5x2⁻⁴.Этажи стремятся к отрицательной бесконечности, поэтому log₂31 равно 4, а не 5. log₂ (1/17) равно -5, а не -4.
int → int
x.bit_length()
Если и ввод, и вывод являются целыми числами, этот собственный целочисленный метод может быть очень эффективным:
- 1
потому что 2ⁿ требует n + 1 бит. Работает для очень больших целых чисел, например2**10000
.Этажи стремятся к отрицательной бесконечности, поэтому log₂31 равно 4, а не 5. log₂ (1/17) равно -5, а не -4.
источник
Если вы используете python 3.4 или выше, то он уже имеет встроенную функцию для вычисления log2 (x).
Если вы используете более старую версию python, вы можете сделать это так
источник
Использование numpy:
источник
http://en.wikipedia.org/wiki/Binary_logarithm
источник
источник
math.log
функцию. См. Ответ unutbu.Попробуй это ,
источник
logbase2 (x) = журнал (x) / журнал (2)
источник
В Python 3 или выше математический класс имеет следующие функции
или вы можете использовать его
math.log(x, base)
для любой базы.источник
log_base_2 (x) = журнал (x) / журнал (2)
источник
Не забывайте , что журнал [база] Х = журнал [база B] х / журнал [базовый B] A .
Итак, если у вас есть только
log
(для натурального журнала) иlog10
(для журнала с основанием 10), вы можете использоватьисточник