NumPy Tutorials

NumPy: Мастерство арифметических операций и Broadcasting

Spread the love

NumPy — это базовая библиотека для численных вычислений в Python, предоставляющая мощные инструменты для эффективной обработки массивов. В этом руководстве рассматриваются две фундаментальные концепции: арифметические операции и вещание (broadcasting), необходимые для написания лаконичного и производительного численного кода.

Содержание

  1. Арифметические операции
  2. Вещание

1. Арифметические операции

NumPy плавно расширяет арифметические операторы Python (+, -, *, /, //, %, **) для работы непосредственно с массивами NumPy. Эти операции выполняются поэлементно, то есть применяются к соответствующим элементам массивов. Проиллюстрируем примерами:


import numpy as np

arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])

print("Сложение:", arr1 + arr2)       # Output: [ 6  8 10 12]
print("Вычитание:", arr1 - arr2)    # Output: [-4 -4 -4 -4]
print("Умножение:", arr1 * arr2) # Output: [ 5 12 21 32]
print("Деление:", arr1 / arr2)      # Output: [0.2        0.33333333 0.42857143 0.5       ]
print("Целочисленное деление:", arr1 // arr2) # Output: [0 0 0 0]
print("Остаток от деления:", arr1 % arr2)        # Output: [1 2 3 4]
print("Возведение в степень:", arr1 ** arr2) # Output: [    1    64  2187 65536]

Эта поэлементная операция легко распространяется на многомерные массивы.

2. Вещание

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

  1. Правило 1: Если массивы имеют неравное количество измерений, к форме массива меньшей размерности добавляются ведущие единицы, пока она не совпадет с размерностью массива большей размерности.
  2. Правило 2: Если массив имеет измерение размером 1, а другой массив имеет измерение больше 1, измерение размером 1 растягивается, чтобы соответствовать большему измерению.
  3. Правило 3: Если массивы имеют разные размеры и ни один из них не имеет размер 1, возникает ошибка ValueError.

Продемонстрируем вещание:


import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])

result = arr1 + arr2  # Вещание в действии

print(result)
# Output:
# [[11 22 33]
# [14 25 36]]

Здесь arr2 (форма (3,)) вешется для соответствия форме arr1 (2, 3). Каждая строка arr1 складывается с arr2, избегая явного циклического перебора. Освоение вещания имеет решающее значение для написания эффективного и читаемого кода NumPy. Всегда тщательно рассматривайте формы массивов, чтобы избежать неожиданных результатов или ошибок.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *