Язык Python пригодится любому математику. Встроенный модуль math имеет большой арсенал инструментов для математических вычислений. В этой статье поговорим о математике в Питоне, а именно о:
- математических константах;
- методах округления;
- арифметических операторах возведения в степень и деления;
- углах и тригонометрических функциях;
- сравнении чисел с плавающей точкой, модуле и повторении элементов в списке.
В большинстве случаев будет пользоваться модулем math [1]. Поэтому прежде всего его нужно импортировать:
>>> import math
Математические константы
Python предоставляет использование математических констант, находящиеся в модуле math, например Пи, число Эйлера, пустое значение nan, бесконечность:
>>> math.pi # Значение пи 3.141592653589793 >>> math.e # Значение числа е 2.718281828459045 >>> math.nan # Значение nan >>> math.inf # Бесконечность inf
Также nan и inf можно получить и без модуля math, используя объект float
:
>>> float('inf') inf >>> float('nan') nan
Округление
Иногда не хочется смотреть на все цифры после запятой или не нужна высокая точность. Для конвертации чисел с плавающей точкой в целочисленные используются следующие функции из math:
trunc
, которая отрезает все цифры после запятой;floor
для округления в меньшую сторону;ceil
для округления в большую сторону.
>>> number = 5.348762 >>> math.trunc(number) 5 >>> math.floor(number) 5 >>> math.ceil(number) 6
Для округления до k-го знака после запятой используется встроенная в Python функция round, принимающее в качестве аргументов само число и количество знаков k:
>>> number = 5.348762 >>> round(number, 1) 5.3 >>> round(number, 2) 5.35 >>> round(number, 3) 5.349 >>> round(5.55, 1) 5.5 >>> round(5.5, 0) 6.0 >>> round(2.5, 0) 2.0
Обратите внимание, что число 2.5 округлилось до 2.0, а 5.5 до 6.0. Python округляет до ближайшего четного числа.
Арифметические Операторы
Для возведения в степень используется оператор «**» или math.pow
:
>>> 2 ** 3 8 >>> math.pow(2, 3) 8.0
Рекомендуется использовать «**» для целочисленных значений, а math.pow для чисел с плавающей точкой [2].
Для деления без остатка, которое возвращает целочисленное значение, используется оператор «/», для деления по модулю (с остатком) – оператор «%»:
>>> 5 / 2 2 >>> 5 % 2 1
Тригонометрия
В Python можно работать с углами, радианами, косинусами, синусами, тангенсами и т.д. Конвертация радиан в градусы происходит через функцию math.degrees
:
>>> pi = math.pi >>> math.degrees(pi) 1 80.0 >>> math.degrees(pi/2) 90.0 >>> math.degrees(pi/4) 45.0 >>> math.degrees(pi/3) 59.99999999999999 >>> math.degrees(pi/6) 29.999999999999996
В двух последних случаях счетчик не дошел до 60.0 и 30.0 градусов, соответственно. Для этого можно воспользоваться округлением, рассмотренным выше.
Для конвертации градусов в радианы используется функция math.radians
:
>>> math.radians(180) 3.141592653589793 >>> math.radians(60) 1.0471975511965976
Тригонометрические функции принимают в качестве аргументов значение в радианах:
>>> math.cos(pi) -1.0 >>> math.sin(pi/2) 1.0 >>> math.sin(pi) 1.2246467991473532e-16 >>> math.tan(pi/4) 0.9999999999999999
Полный список тригонометрических функций можно посмотреть в официальной документации Python [3].
Дополнительные примеры, упрощающие жизнь Data Scientist’а
Рассмотрим еще три примера, которые пригодятся каждому разработчику, а не только математикам.
1-й пример. Согласно тригонометрии cos(pi/4) должен равняться sin(pi/4). Так ли это в Python?
>>> pi= math.pi >>> math.sin(pi/4) == math.cos(pi/4) False
Как видим, что нет. В вычислениях с плавающей точкой такое происходит часто. Но нам не всегда важна точность до 120-го знака после запятой. Поэтому можно воспользоваться функцией math.isclose
, возвращающее True в случае если два числа близки друг к другу. По умолчанию рассматриваются только 9 знаков после запятой, но это значение всегда можно изменить по желанию.
>>> sin = math.sin(pi/4) >>> cos = math.cos(pi/4) >>> math.isclose(sin, cos) True
2-й пример. Иногда нас не интересует отрицательные числа. Тогда можно воспользоваться встроенной в Python функцией abs, которое возвращает значение по модулю:
>>> abs(-5) 5 >>> abs(8 - 16) 8
3-й пример. В некоторых случаях необходимо получить повторяющиеся значения в списке. Можно, конечно, использовать циклы, а можно написать следующее:
>>> [0.5] * 5 [0.5, 0.5, 0.5, 0.5, 0.5]
В данном случае оператор «*» служит не умножением, а повторением элементов в списке.
В следующей статье мы поговорим об использовании Python для статистиков. А практические нюансы по математическим вычислениям в Data Science и не только вы узнаете на наших практических курсах по Python в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.