Производство по чертежам Подбор аналогов Цены производителя Оригинальная продукция в короткие сроки
INNERпроизводство и поставка промышленных комплектующих и оборудования
Бесплатно Личный кабинет — избранное и расчёты ★ Регистрация →
Новинка Симуляторы и тренажёры — ЧПУ, допуски, ПИД Попробовать →
Правовая информация →

INNER
Контакты

NumPy для инженера

  • 14.07.2026
  • Познавательное

NumPy для инженера — это переход от медленных циклов по спискам к быстрым векторным вычислениям над массивами. Библиотека NumPy даёт однородный многомерный массив ndarray и набор операций над ним: поэлементную арифметику, работу с матрицами, линейную алгебру и решение систем линейных уравнений. Для инженерных расчётов это означает компактный код, который читается как формула и выполняется со скоростью скомпилированного кода на C.

Ниже — краткий, но практический разбор: чем массив отличается от списка, как заменить циклы векторными операциями, как работать с матрицами и решать СЛАУ, с примерами кода под типовые инженерные задачи.

Содержание статьи
Основа

Зачем инженеру NumPy

Список Python универсален, но для чисел неэффективен: элементы разнотипны, хранятся вразброс, а любая операция идёт интерпретируемым циклом. Массив NumPy — однородный (все элементы одного типа), хранится компактным непрерывным блоком, а операции выполняются оптимизированным кодом на C сразу над всем массивом. Такой приём называется векторизацией: вместо явного цикла записывается одно выражение над массивом.

Тип данных
ndarray — N-мерный однородный массив
Ключевая идея
векторизация: операция сразу над всем массивом, без цикла
Скорость
ядро на C; массовые операции существенно быстрее циклов на Python
Что внутри
арифметика, статистика, линейная алгебра, преобразования Фурье, генерация случайных чисел

Главный принцип: там, где на чистом Python был бы цикл по числам, в NumPy пишется одно векторное выражение.

Наверх Массивы

Массив ndarray: создание и свойства

Массив создают из готовых данных функцией np.array либо генерируют конструкторами. У массива есть форма shape, тип элементов dtype и число измерений ndim; форму можно менять методом reshape без копирования данных.

ФункцияНазначение
np.array([...])массив из списка или вложенных списков
np.zeros(shape)массив из нулей заданной формы
np.ones(shape)массив из единиц
np.full(shape, v)массив, заполненный значением v
np.arange(a, b, h)значения от a до b с шагом h (без верхней границы)
np.linspace(a, b, n)n равномерных точек от a до b включительно
np.eye(n)единичная матрица n×n
import numpy as np

d = np.array([10, 12, 16, 20])   # диаметры, мм
print(d.shape)                   # (4,)
print(d.dtype)                   # int64 (зависит от платформы)

grid = np.linspace(0, 1, 5)      # [0.   0.25 0.5  0.75 1.  ]
M = np.zeros((3, 3))             # нулевая матрица 3x3

Массив однороден: у него единый тип элементов. Смешение целых и вещественных приведёт тип к вещественному, а попытка положить в целочисленный массив дробное значение усечёт его. Тип задают явно параметром dtype, например np.array([1, 2, 3], dtype=float).

Наверх Векторизация

Векторные операции и broadcasting

Арифметика над массивами поэлементна: +, -, *, /, ** применяются к каждому элементу, а функции np.sin, np.exp, np.sqrt и другие работают над всем массивом сразу. Это прямая замена цикла.

import numpy as np

d = np.array([10, 12, 16, 20])     # диаметры, мм
A = np.pi * d**2 / 4               # площади сечения, мм^2
# A = [ 78.54 113.10 201.06 314.16 ]

F = np.array([1000, 2000, 3000, 4000])  # силы, Н
sigma = F / A                      # напряжения, Н/мм^2 = МПа

Broadcasting — правило, по которому NumPy автоматически «растягивает» массивы разной формы до совместимой, если их размерности согласуются. Простейший случай — операция массива со скаляром: скаляр применяется к каждому элементу. Так же можно, например, прибавить вектор-строку к каждой строке матрицы.

T_c = np.array([20, 35, 50])       # температуры, °C
T_k = T_c + 273.15                 # перевод в кельвины (broadcasting со скаляром)

M = np.ones((3, 3))
row = np.array([1, 2, 3])
R = M * row                        # row умножается на каждую строку M

Векторизация не только короче, но и быстрее: цикл по элементам на Python заменяется одной операцией в скомпилированном ядре.

Наверх Доступ к данным

Индексирование, срезы и маски

К элементам обращаются по индексам с нуля; для двумерных массивов индексация двойная — M[i, j]. Срезы a[start:stop:step] возвращают подмассивы. Особенно полезна инженеру булева маска — отбор элементов по условию, то есть фильтрация данных без цикла.

sigma = np.array([12.7, 17.7, 14.9, 25.3])   # напряжения, МПа

over = sigma[sigma > 20]      # элементы больше 20: [25.3]
count = np.sum(sigma > 20)     # сколько превышений: 1
sigma[sigma > 20] = 20.0        # обрезать всё, что выше порога

col = M[:, 0]                   # весь нулевой столбец матрицы M

Условие sigma > 20 возвращает булев массив той же формы; его можно использовать как индекс для выборки или присваивания, а сумма булева массива даёт число истинных элементов.

Наверх Линейная алгебра

Матрицы и линейная алгебра

Матрица в NumPy — это обычный двумерный массив. Матричное умножение выполняется оператором @ (не путать с * — поэлементным). Транспонирование — атрибут .T. Основные операции линейной алгебры собраны в подмодуле numpy.linalg.

ВыражениеНазначение
A @ Bматричное умножение
A.Tтранспонирование
np.linalg.inv(A)обратная матрица
np.linalg.det(A)определитель
np.linalg.solve(A, b)решение системы A·x = b
np.linalg.eig(A)собственные значения и векторы
np.linalg.norm(v)норма вектора или матрицы
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

C = A @ B              # [[19 22] [43 50]]
At = A.T              # [[1 3] [2 4]]
detA = np.linalg.det(A)   # ≈ -2.0 (число с плавающей точкой)

Функции линейной алгебры возвращают числа с плавающей точкой, поэтому результат может содержать крошечную погрешность округления (например, определитель, равный −2, иногда выводится как −2.0000000000000004). При сравнении величин используйте допуск, а не проверку на точное равенство.

Для матриц используйте двумерный ndarray, а не устаревший тип np.matrix — он не рекомендуется даже для линейной алгебры. Оператор @ — предпочтительный способ матричного умножения двумерных массивов.

Наверх Системы уравнений

Решение систем уравнений (СЛАУ)

Система линейных уравнений записывается в матричной форме A·x = b, где A — матрица коэффициентов, b — вектор правых частей. Решение находит функция np.linalg.solve(A, b). Она вычисляет решение через разложение (LAPACK) и точнее и быстрее, чем явное умножение на обратную матрицу.

Для системы
2x + y − z = 8
−3x − y + 2z = −11
−2x + y + 2z = −3
матрица коэффициентов и вектор правых частей передаются в solve, результат — вектор неизвестных [x, y, z].
import numpy as np

A = np.array([[ 2,  1, -1],
              [-3, -1,  2],
              [-2,  1,  2]])
b = np.array([8, -11, -3])

x = np.linalg.solve(A, b)     # [ 2.  3. -1.]

Матрица A должна быть квадратной и невырожденной (полного ранга). Если она вырождена или не квадратна, NumPy возбудит исключение LinAlgError. Для переопределённых систем (уравнений больше, чем неизвестных) применяют метод наименьших квадратов np.linalg.lstsq.

Такой подход удобен для инженерных задач, сводящихся к линейным балансам: узловые уравнения, схемы, статически определимые системы, материальные и энергетические балансы.

Наверх Практика

Рекомендации и типичные ошибки

  1. Заменяйте циклы векторными операциями. Если в коде есть цикл, поэлементно обрабатывающий числа, почти всегда его можно записать одним выражением над массивом — короче и быстрее.
  2. Различайте * и @. Звёздочка — поэлементное умножение, собака — матричное. Их путаница даёт формально работающий, но неверный результат.
  3. Следите за типом dtype. Целочисленный массив усекает дробные значения. Для расчётов задавайте вещественный тип явно.
  4. Помните про broadcasting. Он мощный, но при несогласованных формах даёт либо ошибку, либо незаметно неверный результат — проверяйте shape операндов.
  5. Для СЛАУ используйте solve, а не обратную матрицу. Явное inv(A) @ b менее точно численно и медленнее, чем np.linalg.solve.
Наверх

Частые вопросы

Чем NumPy полезен инженеру по сравнению с обычным Python?

Он заменяет циклы по числам векторными операциями над массивами: код становится короче и читается как формула, а вычисления идут со скоростью скомпилированного ядра на C. Плюс встроенная линейная алгебра и решение систем уравнений.

Чем массив ndarray отличается от списка Python?

Массив однороден (все элементы одного типа) и хранится компактным непрерывным блоком, поэтому операции над ним выполняются оптимизированным кодом сразу над всеми элементами. Список разнотипен и обрабатывается медленным интерпретируемым циклом.

Как решить систему линейных уравнений в NumPy?

Записать её в виде A·x = b и вызвать np.linalg.solve(A, b). Матрица A должна быть квадратной и невырожденной; для несовместных или переопределённых систем используют np.linalg.lstsq.

Чем отличается умножение * от @?

Звёздочка выполняет поэлементное умножение массивов одинаковой формы, а оператор @ — матричное умножение по правилам линейной алгебры. Для произведения матриц нужен именно @.

Что такое broadcasting?

Это правило автоматического согласования форм: массивы разного размера «растягиваются» до совместимой формы, если их размерности сочетаются. Простейший пример — операция массива со скаляром, который применяется к каждому элементу.

Как отфильтровать данные по условию без цикла?

Булевой маской: выражение вида a[a > порог] возвращает элементы, удовлетворяющие условию. Ту же маску можно использовать для присваивания, а сумма булева массива даёт число подходящих элементов.

Нужен ли отдельный тип матрицы?

Нет. Матрица — это обычный двумерный массив. Устаревший тип np.matrix использовать не рекомендуется; для линейной алгебры применяют двумерный ndarray и оператор @.

Статья носит ознакомительный характер. Названия функций, поведение и состав библиотеки могут меняться между версиями; при разработке сверяйтесь с документацией используемой версии NumPy и Python. Автор и издатель не несут ответственности за последствия применения приведённых сведений на практике.

Источники

  1. Официальная документация NumPy (NumPy Reference и NumPy User Guide), актуальная версия ветки 2.x.
  2. Официальная документация Python (стандартная библиотека и язык).
  3. Маккинни У. Python и анализ данных. — О'Рейли / ДМК Пресс.
  4. Вандер Плас Дж. Python для сложных задач: наука о данных. — Питер.

© Компания Иннер Инжиниринг. Все права защищены.

Появились вопросы?

Вы можете задать любой вопрос на тему нашей продукции или работы нашего сайта.