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 рассматривает данные как математические структуры,
над которыми операции выполняются сразу над всем массивом.

Именно это делает библиотеку основой современной численной аналитики.