3.3 Операции и векторизация
1. Почему NumPy изменяет подход к вычислениям
Обычные списки Python позволяют хранить данные, но при выполнении большого количества вычислений возникают серьёзные ограничения.
Например, для обработки каждого элемента списка обычно используются циклы:
values = [1, 2, 3]
result = []
for x in values:
result.append(x * 2)
print(result)
Такой подход:
· делает код длиннее;
· замедляет вычисления;
· усложняет обработку больших массивов данных.
NumPy предлагает другой подход – векторные операции над всем массивом сразу.
2. Ключевая идея NumPy – векторизация
Главное отличие NumPy от стандартных списков Python – поддержка векторизации.
Векторизация означает: выполнение операции сразу над всей структурой данных без явного использования циклов.
Список Python
numbers = [1, 2, 3]
numbers * 2
Результат:
[1, 2, 3, 1, 2, 3]
Массив NumPy
numbers = np.array([1, 2, 3])
numbers * 2
Результат:
[2 4 6]
В NumPy операция автоматически применяется ко всем элементам массива.
3. Почему векторизация важна
Векторизация:
· упрощает код;
· ускоряет вычисления;
· снижает вероятность ошибок;
· уменьшает количество циклов Python.
Таблица 3.3.1 – Сравнение подходов
|
Обычный Python |
NumPy |
|
цикл for |
операция над массивом |
|
ручная обработка элементов |
автоматическая обработка |
|
длинный код |
компактный код |
|
медленные вычисления |
быстрые вычисления |
Поэтому NumPy особенно эффективен при работе с большими объёмами числовых данных.
4. Поэлементные операции над массивами
NumPy поддерживает арифметические операции между массивами.
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
Результат:
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
Все операции выполняются:
поэлементно.
5. Массив как математический вектор
В NumPy массив рассматривается как математический объект.
Это означает, что арифметические операции интерпретируются как операции линейной алгебры.
Например:
a = np.array([1, 2, 3])
print(a + 10)
Результат:
[11 12 13]
Число автоматически прибавляется ко всем элементам массива.
6. Векторизация и производительность
NumPy выполняет вычисления значительно быстрее обычных циклов Python.
Причины:
· операции реализованы на уровне низкоуровневого кода;
· массивы хранятся компактно в памяти;
· уменьшается количество обращений интерпретатора Python.
Поэтому:
векторизация особенно важна:
· при обработке больших датасетов;
· статистическом анализе;
· машинном обучении;
· численных расчётах.
7. Почему NumPy уменьшает количество ошибок
При ручной обработке данных через циклы программисту необходимо:
· самостоятельно создавать списки;
· управлять индексами;
· контролировать добавление элементов.
Это увеличивает вероятность ошибок.
Векторные операции NumPy:
· делают код короче;
· уменьшают количество ручных действий;
· упрощают чтение программы.
8. Broadcasting – расширение операций NumPy
NumPy умеет автоматически расширять операции между массивами разных размеров.
Например:
a = np.array([1, 2, 3])
print(a + 5)
Результат:
[6 7 8]
Число автоматически применяется ко всем элементам массива.
Такой механизм называется:
broadcasting.
9. Векторизация как основа аналитики данных
Большинство аналитических вычислений:
· статистика;
· нормализация;
· преобразование признаков;
· обработка таблиц;
· машинное обучение
выполняются именно как операции над массивами.
Поэтому понимание векторизации является обязательным для аналитика данных.
10. Итоги темы
В теме были рассмотрены:
· векторизация;
· поэлементные операции;
· арифметика массивов;
· роль NumPy в ускорении вычислений;
· broadcasting;
· преимущества массивных вычислений.
NumPy рассматривает данные как
математические структуры,
над которыми операции выполняются сразу над всем массивом.
Именно это делает библиотеку основой современной численной аналитики.