1. Основы NumPy для численных вычислений
Основы NumPy для численных вычислений
NumPy — базовая библиотека экосистемы Python для работы с массивами и выполнения быстрых численных вычислений. В вычислительной математике мы почти всегда работаем с векторами, матрицами, сетками, выборками измерений и табличными данными. NumPy даёт единый инструмент для всех этих случаев: многомерный массив ndarray и набор операций над ним.
В этой статье вы изучите фундамент: как создавать массивы, понимать их форму и типы данных, выполнять векторизованные вычисления, пользоваться индексацией и broadcasting, а также применять базовые операции линейной алгебры.
> Официальная документация: NumPy документация
Что такое ndarray и почему он важен
numpy.ndarray — это:
dtype).Вычислительная математика постоянно использует объекты, которые естественно представляются массивами:
Справка по объекту массива: numpy.ndarray
Установка и импорт
Чаще всего NumPy импортируют как np.
Создание массивов
Из Python-списков
Важно: при создании NumPy выберет общий тип данных (dtype), который сможет вместить все элементы.
Специальные конструкторы
Равномерные сетки: arange и linspace
В вычислительной математике часто строят сетку по оси .
Практический совет:
np.linspace(a, b, n) удобен, когда важно число узлов.np.arange(a, b, h) удобен, когда важен шаг.Форма массива: shape, размерность: ndim, количество элементов: size
Ключевые характеристики массива:
shape — кортеж размеров по осям.ndim — число осей (измерений).size — общее число элементов.!Визуальная интуиция формы массива и осей
Типы данных: dtype
NumPy хранит элементы в одном типе данных, например int64, float64.
Почему это важно для численных задач:
float64 обычно безопаснее для вычислений (меньше ошибок округления, чем у float32).dtype.Индексация и срезы
Одномерные массивы
Двумерные массивы
Важный момент: срезы — это представления (views)
Срез часто не копирует данные, а даёт вид на исходный массив.
Если нужна независимая копия:
Векторизация: вычисления без явных циклов
Вычислительная математика выигрывает от того, что операции применяются сразу ко всем элементам.
Пример: посчитать на сетке.
Почему это лучше циклов for:
Broadcasting: как NumPy “растягивает” размеры
Broadcasting — правило, по которому NumPy выполняет поэлементные операции над массивами разных форм, если их размеры совместимы.
Классический пример: прибавить вектор к каждой строке матрицы.
Интуиция: v как бы “повторяется” для каждой строки.
Официальное руководство: NumPy Broadcasting
!Наглядное объяснение, как работает broadcasting
Практический приём: “сделать столбец” через добавление оси.
Универсальные функции (ufunc) и агрегирования
Поэлементные функции
NumPy предоставляет быстрые поэлементные функции:
Агрегирования
Агрегирования сводят массив к меньшей размерности: сумма, среднее, максимум.
axis=0 означает “вдоль строк”, то есть результат по столбцам.axis=1 означает “вдоль столбцов”, то есть результат по строкам.Матричные операции и линейная алгебра
В вычислительной математике очень часто встречаются выражения вида .
Умножение: поэлементное и матричное — это разные операции
Оператор @ соответствует матричному произведению.
Скалярное произведение и норма
Скалярное произведение двух векторов и часто записывают как . В NumPy:
Евклидова норма (длина) вектора :
Пояснение символов:
В NumPy это обычно делают так:
Решение системы линейных уравнений
Для квадратной системы :
Справочник по линейной алгебре: numpy.linalg
Практический совет:
np.linalg.inv(A) @ b для решения системы, если можно np.linalg.solve(A, b) — решение через solve обычно устойчивее и быстрее.Генерация данных: numpy.random
Для моделирования, Монте-Карло и тестирования алгоритмов нужны случайные данные.
default_rng предпочтительнее старого интерфейса, потому что даёт явный генератор и более предсказуемое управление случайностью.
Чтение и запись массивов
Текстовые файлы
Двоичный формат NumPy (быстро и без потери точности)
Ошибки, на которые часто наталкиваются
* и @:* — поэлементное умножение
- @ — матричное умножение
.copy()).dtype.Минимальный чек-лист перед численным экспериментом
shape, dtype и оси для агрегирования.np.linalg.solve, np.linalg.norm, оператор @.default_rng(seed).Что дальше в курсе
Дальнейшие темы вычислительной математики (аппроксимация, численное дифференцирование и интегрирование, решение систем и оптимизация) будут опираться на навыки из этой статьи: уверенное владение формой массивов, векторизацией, broadcasting и базовой линейной алгеброй в NumPy.