логарифм — Логарифм по основанию 2 в питоне
спросил
Изменено 8 месяцев назад
Просмотрено 302 тысячи раз
Как мне вычислить журнал по основанию два в python. Например. У меня есть это уравнение, где я использую логарифмическую базу 2
импорта математики e = -(t/T)* math.log((t/T)[ 2])
- питон
- логарифм
4
Хорошо знать, что
, но также знать, что math.log
принимает необязательный второй аргумент, который позволяет указать базу:
В [22]: import math В [23]: math.log? Тип: встроенная_функция_или_метод Базовый класс:Строковая форма: <журнал встроенной функции> Пространство имен: Интерактивный Строка документации: log(x[ base]) -> логарифм x по данному основанию. Если основание не указано, возвращает натуральный логарифм (по основанию e) числа x. В [25]: math.log(8,2) Выход[25]: 3.0
3
Зависит от того, является ли ввод или вывод int
или float
.
утверждают 5.392317422778761 == math.log2(42.0) утверждать 5.392317422778761 == math.log(42.0, 2.0) утверждать 5 == math.frexp(42.0)[1] - 1 утверждать 5 == (42).bit_length() - 1
импорт математики log2 = math.log(x, 2.0) log2 = math.log2(x) # python 3.3 или новее
- Спасибо @akashchandrakar и @unutbu.
Если все, что вам нужно, это целая часть логарифма по основанию 2 числа с плавающей запятой, извлечение экспоненты довольно эффективно:
log2int_slow = int(math.floor(math.log(x, 2.0))) # эти дай log2int_fast = math.frexp(x)[1] - 1 # тот же результат
Python frexp() вызывает функцию C frexp(), которая просто берет и настраивает экспоненту.
Python frexp() возвращает кортеж (мантисса, экспонента). Итак,
[1]
получает экспоненциальную часть.Для целых степеней двойки показатель степени на единицу больше, чем можно было бы ожидать. Например, 32 хранится как 0,5×2⁶. Это объясняет
- 1
выше. Также работает для 1/32, который хранится как 0,5×2⁻⁴.Этажи в сторону отрицательной бесконечности, поэтому log₂31, вычисленный таким образом, равен 4, а не 5. log₂(1/17) равен -5, а не -4.
Если и ввод, и вывод являются целыми числами, этот родной целочисленный метод может быть очень эффективным:
log2int_faster = x.bit_length() - 1
- 1
2**10000
.Этажи в сторону отрицательной бесконечности, поэтому log₂31, вычисленный таким образом, равен 4, а не 5.
2
Если вы используете Python 3.3 или выше, у него уже есть встроенная функция для вычисления log2(x)
import math 'находит логарифм по основанию 2 x' ответ = math.log2(x)
Если вы используете более старую версию Python, вы можете сделать так:
импортировать математику 'находит логарифм по основанию 2 x' ответ = math.log(x)/math.log(2)
0
Использование numpy:
В [1]: импортировать numpy как np В [2]: np.log2? Тип: функция Базовый класс: <тип 'функция'> Строковая форма: <журнал2 функции по адресу 0x03049030> Пространство имен: Интерактивный Файл: c:\python26\lib\site-packages\numpy\lib\ufunclike.py Определение: np.log2(x, y=нет) Строка документации: Возвращает логарифм по основанию 2 входного массива по элементам. Параметры ---------- х : массив_подобный Входной массив. у : массив_подобный Необязательный выходной массив той же формы, что и `x`. Возвращает ------- у : ндаррай Логарифм по основанию 2 числа 'x' по элементам. NaN возвращаются, где `x` отрицательно. Смотрите также -------- лог, лог1р, лог10 Примеры -------- >>> np.log2([-1, 2, 4]) массив([NaN, 1., 2.]) В [3]: np.log2(8) Выход[3]: 3.0
http://en.wikipedia.org/wiki/Binary_logarithm
def lg(x, tol=1e-13): разрешение = 0,0 # Целая часть пока х<1: разрешение -= 1 х *= 2 в то время как х>=2: разрешение += 1 х / = 2 # Дробная часть fp = 1,0 в то время как fp>=tol: fp /= 2 х *= х если х >= 2: х / = 2 разрешение += частота кадров вернуть разрешение
1
>>> по умолчанию log2( x ): ... вернуть math.log( x ) / math.log( 2 ) ... >>> log2( 2 ) 1,0 >>> log2( 4 ) 2.0 >>> log2( 8 ) 3.0 >>> log2( 2.4 ) 1.2630344058337937 >>>
1
Попробуйте это,
импортировать математику print(math. log(8,2)) # math.log(число,основание)
В python 3 или выше математический класс имеет следующие функции
import math math.log2(x) мат.log10(x) math.log1p(x)
или вообще можно использовать math.log(x, base)
для любой базы, которую вы хотите.
1
Не забывайте, что log[база A] x = log[база B] x / log[база B] A .
Таким образом, если у вас есть только log
(для натурального журнала) и log10
(для журнала по основанию 10), вы можете использовать
myLog2Answer = log10(myInput) / log10(2)
Использовать помощь
метод
>>> импортировать математику >>> помощь(math.log) Справка по встроенному журналу функций в модуле math: бревно(...) журнал (х, [база = math.e]) Возвратите логарифм x к данному основанию. Если основание не указано, возвращает натуральный логарифм (по основанию e) числа x. (КОНЕЦ)
лог(х, [база=math.e])
Вернуть логарифм x по заданному основанию.
0
Зарегистрируйтесь или войдите в систему
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Вход Расчеты | Решенные примеры | Алгебра
Сначала обсудим общий подход к использованию бревен в расчетах.
Предположим, что нам нужно оценить значение 9{{e_2}}}} \right\}\\& = {\log _B}a + {\log _B}b + {e_1}{\log _B}c — {\log _B}x — {e_2}{ \log _B}y\end{align}\]Таким образом, если у нас есть значения различных журналов справа, мы можем оценить значение журнала B N . Предположим, что это Z . Тогда мы имеем:
\[{\log _B}N = Z\]
Теперь мы просто берем антилогарифм обеих сторон, что есть не что иное, как возведение обеих сторон в степень B , так что мы имеем 9Z}\]
Таким образом, нам удалось вычислить N , используя только операции сложения и вычитания (и простые умножения). Мы также брали логи и антилог в процессе — но для этого у нас с собой есть лог-таблицы.
Прежде чем приступить к некоторым вычислениям, давайте разберемся, как использовать таблицы журналов. Во-первых, следует отметить, что наша база по умолчанию, которую мы используем в 10, то есть B
Неотъемлемая часть любого бревна называется его характеристикой , а нецелая часть — его мантисса . Обратите внимание, что мантисса всегда будет лежать между 0 и 1. Почему? Потому что мантисса — это логарифм некоторого числа x между 1 и 10, и если \(1 \le x < 10\), то \(0 \le \log x < 1\). Таким образом, мантисса лежит в [0, 1). 91\\&\log\;(45.67)\;=\;1\;+\;\log\;(4.567)\end{align}\]
Таким образом, нам нужно найти log 4.567. Найдите стандартную таблицу журналов. В левой колонке найдите «45». Если бы искомое число было «4500», мантисса была бы 0,6532. Но теперь просмотрите самую верхнюю строку и найдите «60». Таким образом, соответствуя «4560», мантисса была бы 0,6590.
Но на самом деле нам нужна мантисса, соответствующая «4567» — таким образом, добавьте число из соответствующего столбца в правом наборе столбцов к мантиссе первых трех цифр. Таким образом, искомая мантисса равна 0,659.0 + 7 = 0,6597.
\[\begin{align}&\Стрелка вправо\log\left(4.567\right)=0.6597\\\\&\Стрелка вправо\log(45.67)=1.6597\end{align}\]
На С другой стороны, предположим, что нам дано, что log N равен 1,6597, т. е. log N = 1,659
log N = 1,6597
1 5
840902. Теперь нам придется использовать антилогарифмические таблицы. Подход тот же: взгляните на эту таблицу:
Таким образом,
\[\mathrm{anti}\log\;(1.6597)\;=\;45.67\]
Теперь, когда вы знаете, как использовать логарифмические и антилогарифмические таблицы, давайте проведем некоторые вычисления с использованием логов.
Пример 1: Использование журналов для оценки \[N = \frac{{647 \cdot 32 \times 0,00000147}}{{8,473 \times 64}}}\]
Решение: Наш подход состоит из четырех шагов :
преобразовать выражение для N в логи
оценить эти журналы с помощью таблицы журнала
таким образом определить журнал N
вычисление антилогарифма журнала N
Таким образом,
\[\begin{align}&\log N = \left( {\frac{{647 \cdot 32 \times 0,00000147}}{{8,473 \times 64}}} \right)\\\ ,\,\,\,\,\,\,\,\,\,\,\,\, &= \log \left( {647 \cdot 32} \right) + \log \left( {0,00000147} \верно)\\\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\ ,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, &- \log \left( {8. 473} \right) — \log \left( {64} \right)\end{align}\] 91\\&\Стрелка вправо\лог\влево(64\вправо)=1+\лог\влево(64\вправо)\\\;\;\;\;\;\;\;\;\;\;\ ;\;\;\;\;\;\;\;&=1.8062\end{align}\]
Таким образом,
\[\begin{align}&\log N=2.8111+\overline6.1673– 0,9280–1,8062\\&\qquad\;=2,8111+\влево(–6+0,1673\вправо)–0,9280–1,8062\\&\qquad\;=–5,7558=–5–0,7558\\&\qquad\;= \left(–5–1\right)+1–0,7558\\&\qquad\;=–6+0,2442\\&\qquad\;=\overline6\cdot2442\end{align}\]
Обратите внимание на последнее пару шагов осторожно. Теперь у нас есть характеристика и мантисса логарифма 9.{ — 6}} = 0.00000\,17547\]
Проверьте это с помощью калькулятора. Обратите внимание, что N было вычислено без каких-либо реальных операций умножения и деления — операций гораздо более громоздких, чем сложение или вычитание.
Пример 2: Найдите значение \(\sqrt[5]{{0,00000165}}\)
Решение: Пусть \(N = \sqrt[5]{{0,00000165}}\)
\[\begin{array}{l} \Rightarrow \,\,\,\log \,N = \frac{1}{5}\log \left( {0,00000165} \right)\\\\\,\ ,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, = \frac{1}{5}\left ( { — 6 + \log 1. 65} \right)\,\,\,{\rm{(почему?)}}\end{массив}\] 92},\,\,22 = 2 \times 11\) и \(70=7\;\times\;10\), мы имеем
\[\begin{array}{l} \log N = 4 \left( {1 + \log 3 + \log 11} \right) — 8\log 7\\ \,\,\,\,\,\,\,\,\,\,\,\,\, \,\,\,\,\,\,\,- \frac{1}{3}\left( {\log 2 + \log 11} \right) — \frac{1}{3}\left( {1 + \log 7} \right)\\ \,\,\,\,\,\,\,\,\,\,\,\,\, = \frac{{11}}{3} — \frac{1}{3}\log 2 + 4\log 3 — \frac{{25}}{3}\log 7 + \frac{{11}}{3}\log 11\\ \,\, \,\,\,\,\,\,\,\,\,\,\, = \frac{{11}}{3} — \frac{1}{3}\left( {0,3010} \right ) + 4\влево( {0,4771} \вправо)\\ \,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, \,\, — \frac{{25}}{3}\left( {0,8451} \right) + \frac{{11}}{3}\left( {1,0414} \right) \end{array}\ ] 9{y + 1}}\]
Решение: У нас есть
\[\begin{array}{l}(x+y)\log2=y\log6\;\;\\\;\ ;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;=y(\log2+\log3)\end{массив}\]
\(\Стрелка вправо x\log2=y\log3\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\ ;\;\;\;\;\;\;\;\;\;\cdots(1)\)
и, \(x\log 3 = \log 3 + \left( {y + 1} \right)\log 2\)
\[\Стрелка вправо\;\;\;\;\left(x-1\ вправо)\log3=\влево(у+1\вправо)\log2\;\;\;\;\;\;\;\;\;\;\;\;\;\;\точки\влево(2 \справа)\]
92}{ab}\right)x=\frac{a+b}a\]\[ \Rightarrow x = \frac{b}{{b — a}} = \frac{{\log 3}} {{\log 3 — \log 2}} \приблизительно \frac{{ \cdot 4771}}{{ \cdot 1761}} \приблизительно 2,71\]
Аналогично, \(y \приблизительно 1,71\).
Пример 6: Докажите, что следующее соотношение верно для трех чисел a , b и c (предположим, что все термины определены корректно):
\[{\log _a}b = \frac{{{{\log }_c}b}}{{{{\log }_c}a}}\]
9x}\,\,\, \Rightarrow \,\,\,yz = x\\ &\Rightarrow \,\,\,z = \frac{y}{x}\,\,\, \Rightarrow \, \,\,{\log _a}b = \frac{{{{\log }_c}b}}{{{{\log }_c}a}}\end{align}\]
Это соотношение позволяет нам менять базы. Например, предположим, что нам нужно вычислить \({\log _{32}}2048\). Мы можем изменить основание на 2 следующим образом: \[{\log _{32}}2048 = \frac{{{{\log }_2}2048}}{{{{\log }_2}32}} = \frac{{11}}{5} = 2.2\]
Какая польза от журналов?
- Журналы полезны для количественной оценки относительного изменения значения, а не его абсолютной разницы.
Как делать логи на калькуляторе?
- Функция «Журнал» доступна на научных калькуляторах. Это ключ, который позволяет вам работать с логарифмами.