Python для математиков

Язык 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 в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.

Источники
  1. https://docs.python.org/3.8/library/math.html
  2. https://stackoverflow.com/questions/10282674/difference-between-the-built-in-pow-and-math-pow-for-floats-in-python
  3. https://docs.python.org/3.8/library/math.html#trigonometric-functions

Добавить комментарий

Поиск по сайту