Математические функции Python: от сложения до массивов NumPy
Для кого эта статья:
- Новички в программировании, интересующиеся изучением Python и математических функций
- Студенты и практикующие специалисты, желающие улучшить свои навыки в области математического моделирования и научных вычислений
Профессионалы, работающие в области инженерии, науки и финансов, нуждающиеся в автоматизации математических расчетов и анализе данных
Python — язык, покоривший мир своей простотой и гибкостью, становится особенно мощным, когда дело касается математических вычислений. Независимо от того, решаете ли вы школьные задачи или разрабатываете алгоритмы машинного обучения, математические функции Python предоставляют необходимый фундамент. В этом руководстве мы разберем всё — от элементарных операций сложения до многомерных массивов NumPy, превращая вас из неуверенного новичка в компетентного Python-разработчика, способного решать математические задачи любой сложности. 🐍➕➖✖️➗
Хотите не просто понять, а мастерски владеть математическими функциями в Python? Программа Обучение Python-разработке от Skypro раскрывает все секреты от базовых вычислений до продвинутых алгоритмов. Наши эксперты показывают, как применять математические библиотеки в реальных проектах — от финансовых расчётов до научных исследований. С нами вы не просто изучаете синтаксис, а получаете практические навыки, востребованные работодателями!
Базовые математические операции и выражения в Python
Python предоставляет интуитивно понятный синтаксис для выполнения основных математических операций. Возможно, вы уже знакомы с ними из других языков программирования или математики, но здесь они реализованы с особой элегантностью.
Начнем с самых базовых операций:
- Сложение:
a + b - Вычитание:
a – b - Умножение:
a * b - Деление:
a / b(всегда возвращает число с плавающей точкой) - Целочисленное деление:
a // b(отбрасывает дробную часть) - Остаток от деления:
a % b - Возведение в степень:
a ** b
Рассмотрим некоторые особенности этих операций на примерах:
# Обычное деление возвращает float
print(10 / 3) # Выведет 3.3333333333333335
# Целочисленное деление
print(10 // 3) # Выведет 3
# Остаток от деления
print(10 % 3) # Выведет 1
# Возведение в степень
print(2 ** 3) # Выведет 8
Python также поддерживает комбинированные операторы присваивания, которые позволяют сократить запись при выполнении операции с последующим присваиванием:
x = 10
x += 5 # Эквивалентно x = x + 5, x теперь равно 15
x *= 2 # Эквивалентно x = x * 2, x теперь равно 30
x /= 3 # Эквивалентно x = x / 3, x теперь равно 10.0
При работе с числами в Python следует помнить о приоритете операций. Он соответствует общепринятым математическим правилам:
| Приоритет | Операции | Описание |
|---|---|---|
| 1 (высший) | ** | Возведение в степень |
| 2 | +x, -x | Унарный плюс, унарный минус |
| 3 | *, /, //, % | Умножение, деление, целочисленное деление, остаток |
| 4 (низший) | +, - | Сложение, вычитание |
Алексей Петров, преподаватель программирования
Однажды на курсе по Python у меня был студент — бухгалтер Михаил, который столкнулся с задачей автоматизации расчётов в своей компании. Он был в отчаянии от сложных формул Excel и постоянных ошибок округления.
Когда мы начали изучать базовые математические операции Python, он сначала сомневался, что это поможет ему в реальной работе. На третьем занятии я предложил ему записать одну из сложных бухгалтерских формул на Python.
Его выражение лица, когда он увидел, насколько элегантно выглядит многострочная формула, стоило видеть! "Это же в десять раз проще читать, чем формулы в Excel!" — воскликнул он. Через месяц Михаил создал скрипт, который не только автоматизировал его задачи, но и исключил проблемы с точностью вычислений благодаря правильному использованию типов данных Python.
В сложных выражениях всегда используйте скобки для явного указания порядка вычислений — это сделает ваш код более читаемым и предотвратит ошибки:
result = (10 + 5) * 3 / (2 ** 2 – 1) # Чётко определен порядок операций
Python также предоставляет встроенные функции для работы с числами:
abs(x)— возвращает абсолютное значение числаround(x, n)— округляет число x до n знаков после запятойmax(x1, x2, ...)— возвращает максимальное значениеmin(x1, x2, ...)— возвращает минимальное значениеpow(x, y)— возвращает x в степени y (аналог x ** y)

Встроенный модуль math: основные функции и константы
Для более сложных математических операций Python предоставляет встроенный модуль math. Этот модуль содержит множество полезных функций и констант, которые выходят за рамки базовых арифметических операций. 📊
Прежде чем использовать модуль, его необходимо импортировать:
import math
Модуль math предоставляет доступ к математическим константам:
math.pi— число π (приблизительно 3.14159)math.e— число e, основание натурального логарифма (приблизительно 2.71828)math.inf— положительная бесконечностьmath.nan— "не число" (Not a Number)math.tau— число τ (tau), равное 2π
Наиболее часто используемые функции из модуля math включают:
| Категория | Функция | Описание | Пример |
|---|---|---|---|
| Округление | math.ceil(x) | Округление вверх | math.ceil(4.1) → 5 |
math.floor(x) | Округление вниз | math.floor(4.9) → 4 | |
| Логарифмы | math.log(x) | Натуральный логарифм | math.log(math.e) → 1.0 |
math.log10(x) | Логарифм по основанию 10 | math.log10(100) → 2.0 | |
math.log2(x) | Логарифм по основанию 2 | math.log2(8) → 3.0 | |
| Степени | math.sqrt(x) | Квадратный корень | math.sqrt(9) → 3.0 |
math.pow(x, y) | x в степени y | math.pow(2, 3) → 8.0 |
Рассмотрим пример использования модуля math для вычисления площади круга:
import math
def circle_area(radius):
return math.pi * math.pow(radius, 2)
print(f"Площадь круга радиусом 5: {circle_area(5)}") # Выведет примерно 78.54
Модуль math также предоставляет функции для работы с факториалами и комбинаторикой:
math.factorial(n)— вычисляет факториал неотрицательного целого числа nmath.comb(n, k)— вычисляет биномиальный коэффициент C(n, k)math.perm(n, k)— вычисляет число перестановок P(n, k)
Пример использования комбинаторных функций:
import math
# Вычисляем количество возможных комбинаций из 5 элементов по 3
combinations = math.comb(5, 3)
print(f"Количество способов выбрать 3 элемента из 5: {combinations}") # Выведет 10
# Вычисляем количество перестановок из 5 элементов по 3
permutations = math.perm(5, 3)
print(f"Количество способов упорядочить 3 элемента из 5: {permutations}") # Выведет 60
# Вычисляем факториал
fact_5 = math.factorial(5)
print(f"5! = {fact_5}") # Выведет 120
Дополнительные полезные функции включают:
math.gcd(a, b)— наибольший общий делительmath.lcm(a, b)— наименьшее общее кратноеmath.fabs(x)— абсолютное значение (возвращает float)math.isclose(a, b)— проверяет, близки ли значения (полезно для чисел с плавающей точкой)math.isfinite(x),math.isinf(x),math.isnan(x)— проверки на конечность, бесконечность и NaN
Тригонометрия и математические преобразования в Python
Тригонометрические вычисления — неотъемлемая часть многих областей, от компьютерной графики до физического моделирования. Python через модуль math предоставляет полный набор тригонометрических функций, которые работают с радианами. 📐
Основные тригонометрические функции:
math.sin(x)— синус угла x (в радианах)math.cos(x)— косинус угла x (в радианах)math.tan(x)— тангенс угла x (в радианах)math.asin(x)— арксинус x (возвращает радианы)math.acos(x)— арккосинус x (возвращает радианы)math.atan(x)— арктангенс x (возвращает радианы)math.atan2(y, x)— арктангенс y/x (учитывает квадрант)
Для конвертации между градусами и радианами используются функции:
math.degrees(x)— конвертирует радианы в градусыmath.radians(x)— конвертирует градусы в радианы
Рассмотрим пример вычисления синуса и косинуса угла в 45 градусов:
import math
# Конвертируем 45 градусов в радианы
angle_rad = math.radians(45)
print(f"45 градусов в радианах: {angle_rad}") # Выведет примерно 0.7853981633974483
# Вычисляем синус и косинус
sin_45 = math.sin(angle_rad)
cos_45 = math.cos(angle_rad)
print(f"sin(45°) = {sin_45}") # Выведет примерно 0.7071067811865475
print(f"cos(45°) = {cos_45}") # Выведет примерно 0.7071067811865476
Гиперболические функции также доступны в модуле math:
math.sinh(x)— гиперболический синусmath.cosh(x)— гиперболический косинусmath.tanh(x)— гиперболический тангенсmath.asinh(x)— обратный гиперболический синусmath.acosh(x)— обратный гиперболический косинусmath.atanh(x)— обратный гиперболический тангенс
Максим Соколов, инженер-программист
На первом курсе магистратуры я столкнулся с задачей моделирования колебаний подвесной системы. Нужно было рассчитать движение маятника с учетом затухания. Казалось бы, тригонометрия из школьной программы, но когда дело дошло до программной реализации, я застрял.
Сначала я попытался использовать Excel, но формулы становились громоздкими, а точность расчетов оставляла желать лучшего. Затем я вспомнил про Python, который мы изучали на курсе программирования.
Я начал с простейших уравнений движения, используя функции sin и cos из модуля math. К моему удивлению, всего за несколько строк кода я смог описать базовую модель. Когда же понадобилось учесть более сложные зависимости, я добавил дифференциальные уравнения с использованием тригонометрических преобразований.
Самым приятным моментом было то, что я смог сгенерировать графики колебаний, добавив всего несколько строк кода с использованием matplotlib. Научный руководитель был впечатлен, а я понял, что Python — идеальный инструмент для инженерных расчетов.
Модуль math также предоставляет специализированные функции для работы с углами:
import math
# Вычисляем гипотенузу по катетам
hypotenuse = math.hypot(3, 4)
print(f"Гипотенуза прямоугольного треугольника с катетами 3 и 4: {hypotenuse}") # Выведет 5.0
# Вычисляем направление вектора (в радианах)
direction = math.atan2(4, 3)
print(f"Направление вектора (3, 4) в радианах: {direction}") # Выведет примерно 0.9272952180016122
print(f"Направление вектора (3, 4) в градусах: {math.degrees(direction)}") # Выведет примерно 53.13010235415598
Практический пример: вычисление координат точки на окружности по углу:
import math
def point_on_circle(radius, angle_degrees, center_x=0, center_y=0):
"""
Вычисляет координаты точки на окружности
:param radius: Радиус окружности
:param angle_degrees: Угол в градусах
:param center_x: X-координата центра окружности
:param center_y: Y-координата центра окружности
:return: Кортеж координат (x, y)
"""
angle_rad = math.radians(angle_degrees)
x = center_x + radius * math.cos(angle_rad)
y = center_y + radius * math.sin(angle_rad)
return (x, y)
# Вычисляем координаты точек на окружности радиусом 10
for angle in range(0, 360, 45):
x, y = point_on_circle(10, angle)
print(f"Точка при {angle}°: ({x:.2f}, {y:.2f})")
Тригонометрические функции в Python позволяют решать широкий спектр задач, от простых вычислений углов и расстояний до сложного моделирования периодических процессов, что делает их незаменимым инструментом в техническом программировании. 🔄
Работа с числами: округление, абсолютные значения и степени
Правильное обращение с числовыми значениями — важный аспект программирования на Python. Рассмотрим основные операции обработки чисел, которые помогут избежать типичных ошибок и сделают ваш код более точным и эффективным. 🔢
Округление чисел
Python предлагает несколько способов округления чисел, каждый из которых имеет свои особенности:
round(x, n)— округляет число x до n знаков после запятой. Если n не указано, округляет до целого.math.floor(x)— округление вниз (возвращает наибольшее целое, не превосходящее x).math.ceil(x)— округление вверх (возвращает наименьшее целое, не меньшее x).math.trunc(x)— отбрасывает дробную часть (округляет к нулю).
Важно отметить особенность функции round() в Python: при округлении чисел, которые находятся ровно посередине между двумя целыми (например, 2.5), Python использует правило "банковского округления" — округление к ближайшему чётному числу:
print(round(2.5)) # Выведет 2
print(round(3.5)) # Выведет 4
# При указании количества знаков после запятой
print(round(2.675, 2)) # Выведет 2.67 (из-за представления чисел с плавающей точкой)
Сравнение различных методов округления:
| Значение | round(x) | math.floor(x) | math.ceil(x) | math.trunc(x) |
|---|---|---|---|---|
| 3.7 | 4 | 3 | 4 | 3 |
| 3.5 | 4 | 3 | 4 | 3 |
| 3.2 | 3 | 3 | 4 | 3 |
| -3.7 | -4 | -4 | -3 | -3 |
| -3.5 | -4 | -4 | -3 | -3 |
| -3.2 | -3 | -4 | -3 | -3 |
Абсолютные значения
Для получения абсолютного значения числа можно использовать два подхода:
abs(x)— встроенная функция, работает с целыми, с плавающей точкой и комплексными числами.math.fabs(x)— функция из модуля math, возвращает float и работает быстрее, но не поддерживает комплексные числа.
import math
print(abs(-5)) # Выведет 5
print(abs(-5.7)) # Выведет 5.7
print(abs(complex(3, -4))) # Выведет 5.0
print(math.fabs(-5.7)) # Выведет 5.7
Работа со степенями и корнями
Python предлагает несколько способов возведения в степень и извлечения корней:
x ** y— возводит x в степень y.math.pow(x, y)— возводит x в степень y (возвращает float).math.sqrt(x)— вычисляет квадратный корень из x.x ** (1/n)— вычисляет корень n-й степени из x.math.exp(x)— вычисляет e^x (экспоненциальная функция).
Пример использования функций для работы со степенями:
import math
print(2 ** 3) # Выведет 8
print(math.pow(2, 3)) # Выведет 8.0
print(math.sqrt(16)) # Выведет 4.0
print(16 ** (1/2)) # Выведет 4.0 (квадратный корень)
print(8 ** (1/3)) # Выведет 2.0 (кубический корень)
print(math.exp(1)) # Выведет 2.718281828459045 (число e)
print(math.exp(2)) # Выведет 7.38905609893065 (e^2)
Проблемы с точностью чисел с плавающей точкой
При работе с числами с плавающей точкой в Python (как и в большинстве других языков программирования) необходимо учитывать ограничения представления чисел в двоичной системе:
print(0.1 + 0.2) # Выведет 0.30000000000000004, а не 0.3
Для сравнения чисел с плавающей точкой лучше использовать функцию math.isclose() или установить допустимую погрешность:
import math
a = 0.1 + 0.2
b = 0.3
# Неправильный способ сравнения
print(a == b) # Выведет False
# Правильные способы сравнения
print(math.isclose(a, b)) # Выведет True
print(abs(a – b) < 1e-9) # Выведет True
Форматирование чисел при выводе
Для контроля над тем, как числа отображаются в выводе, можно использовать f-строки с спецификаторами формата:
pi = math.pi
# Форматирование с указанием количества знаков после запятой
print(f"Pi с 2 знаками после запятой: {pi:.2f}") # Выведет "Pi с 2 знаками после запятой: 3.14"
# Научный формат (экспоненциальная запись)
large_num = 1234567890
print(f"Большое число в научном формате: {large_num:.2e}") # Выведет "Большое число в научном формате: 1.23e+09"
# Задание общей ширины поля и выравнивание
for i in range(1, 11):
square = i ** 2
print(f"{i:3} в квадрате = {square:4}")
Генерация случайных чисел
Для генерации случайных чисел в Python используется модуль random:
import random
# Случайное число с плавающей точкой от 0 до 1
print(random.random()) # Например, 0.7304994308119415
# Случайное целое число в диапазоне
print(random.randint(1, 10)) # Например, 7
# Случайное число с плавающей точкой в диапазоне
print(random.uniform(1.5, 3.5)) # Например, 2.4123084076626193
# Выбор случайного элемента из последовательности
print(random.choice(['красный', 'зеленый', 'синий'])) # Например, "зеленый"
Библиотека NumPy для продвинутых математических вычислений
NumPy (Numerical Python) — это фундаментальная библиотека для научных вычислений в Python. Она предоставляет мощные возможности для работы с многомерными массивами и выполнения сложных математических операций. NumPy значительно расширяет математические возможности стандартного Python, обеспечивая высокую производительность и удобный синтаксис. 🚀
Прежде чем использовать NumPy, необходимо установить библиотеку (если она еще не установлена) и импортировать ее:
# Установка (выполняется один раз в командной строке)
# pip install numpy
# Импорт в Python-скрипте
import numpy as np
Основы работы с массивами NumPy
Основной объект в NumPy — это многомерный массив ndarray. Он позволяет эффективно работать с большими наборами данных:
import numpy as np
# Создание одномерного массива
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1) # [1 2 3 4 5]
# Создание двумерного массива (матрицы)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
# [[1 2 3]
# [4 5 6]]
# Получение размерности и формы массива
print(arr1.ndim) # 1 (размерность)
print(arr1.shape) # (5,) (форма)
print(arr2.shape) # (2, 3) (форма: 2 строки, 3 столбца)
NumPy предоставляет множество функций для создания специальных массивов:
np.zeros(shape)— массив, заполненный нулямиnp.ones(shape)— массив, заполненный единицамиnp.empty(shape)— неинициализированный массивnp.arange(start, stop, step)— массив с равномерно распределенными значениямиnp.linspace(start, stop, num)— массив с num равномерно распределенными точкамиnp.random.random(shape)— массив со случайными значениями от 0 до 1
# Создание специальных массивов
zeros = np.zeros((2, 3)) # Массив из нулей размера 2x3
ones = np.ones((2, 2)) # Массив из единиц размера 2x2
sequence = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
linspace = np.linspace(0, 1, 5) # [0\., 0.25, 0.5, 0.75, 1.]
random_arr = np.random.random((2, 2)) # Случайный массив 2x2
Математические операции с массивами
NumPy позволяет выполнять векторизованные операции над массивами, что значительно ускоряет вычисления по сравнению с циклами Python:
# Операции с массивами
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9] (поэлементное сложение)
print(a * b) # [4 10 18] (поэлементное умножение)
print(a ** 2) # [1 4 9] (возведение в степень)
print(np.sqrt(a)) # [1\. 1.41421356 1.73205081] (квадратный корень)
Для матричных операций NumPy предоставляет специальные функции:
# Матричные операции
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(np.dot(A, B)) # Матричное умножение
# [[19 22]
# [43 50]]
print(np.linalg.det(A)) # Определитель: -2.0
print(np.linalg.inv(A)) # Обратная матрица
# [[-2. 1. ]
# [ 1.5 -0.5]]
Статистические функции
NumPy предоставляет богатый набор функций для статистического анализа:
data = np.array([1, 2, 3, 4, 5])
print(np.mean(data)) # Среднее: 3.0
print(np.median(data)) # Медиана: 3.0
print(np.std(data)) # Стандартное отклонение: 1.4142135623730951
print(np.var(data)) # Дисперсия: 2.0
print(np.min(data)) # Минимум: 1
print(np.max(data)) # Максимум: 5
print(np.sum(data)) # Сумма: 15
Тригонометрические функции в NumPy
NumPy предоставляет оптимизированные версии тригонометрических функций, которые могут работать с массивами:
angles = np.array([0, np.pi/4, np.pi/2, np.pi])
print(np.sin(angles)) # [0\.0, 0.7071067811865475, 1.0, 0.0]
print(np.cos(angles)) # [1\.0, 0.7071067811865476, 0.0, -1.0]
print(np.tan(angles)) # [0\.0, 0.9999999999999999, 16331239353195370.0, -0.0]
Преимущества NumPy перед стандартным Python
- Производительность: NumPy использует оптимизированный код на C для вычислений, что делает операции значительно быстрее.
- Векторизация: возможность выполнять операции над всеми элементами массива без явных циклов.
- Функциональность: библиотека предоставляет множество математических функций и алгоритмов.
- Совместимость: NumPy легко интегрируется с другими научными библиотеками Python, такими как SciPy, pandas и matplotlib.
Сравнение скорости вычислений стандартного Python и NumPy:
import time
import numpy as np
# Создание массивов
size = 1000000
python_list = list(range(size))
numpy_array = np.arange(size)
# Возведение в квадрат с помощью Python
start = time.time()
python_result = [x ** 2 for x in python_list]
python_time = time.time() – start
print(f"Время Python: {python_time:.6f} секунд")
# Возведение в квадрат с помощью NumPy
start = time.time()
numpy_result = numpy_array ** 2
numpy_time = time.time() – start
print(f"Время NumPy: {numpy_time:.6f} секунд")
print(f"NumPy быстрее в {python_time / numpy_time:.2f} раз")
Практический пример: решение системы линейных уравнений
NumPy позволяет легко решать системы линейных уравнений:
import numpy as np
# Система уравнений:
# 2x + y = 5
# 3x + 2y = 8
# Матрица коэффициентов
A = np.array([[2, 1], [3, 2]])
# Вектор правой части
b = np.array([5, 8])
# Решение системы
x = np.linalg.solve(A, b)
print("Решение системы уравнений:")
print(f"x = {x[0]}") # x = 2.0
print(f"y = {x[1]}") # y = 1.0
# Проверка решения
print("Проверка:", np.allclose(np.dot(A, x), b)) # True
Операции с многомерными массивами
NumPy эффективно работает с многомерными массивами, что особенно полезно для обработки изображений и других многомерных данных:
# Создание 3D массива
cube = np.zeros((3, 3, 3))
# Заполнение массива
for i in range(3):
for j in range(3):
for k in range(3):
cube[i, j, k] = i + j + k
# Срезы многомерных массивов
print(cube[0]) # Первый слой
print(cube[:, 1, :]) # Средний слой по второй оси
print(cube[..., 2]) # Последний слой по третьей оси
# Операции над многомерными массивами
print(np.sum(cube)) # Сумма всех элементов
print(np.sum(cube, axis=0)) # Сумма по первой оси
Python превращает математические вычисления из сложного испытания в элегантное решение. Начиная с простых арифметических операций и заканчивая многомерными массивами NumPy, этот язык предлагает полный набор инструментов для решения любых математических задач. Главное преимущество — в эволюции от базовых встроенных функций к специализированным библиотекам, что позволяет расти вместе с вашими потребностями. Математика в Python не просто работает — она работает интуитивно, эффективно и элегантно, делая сложное простым, а невозможное — возможным.