Транслирование — это механизм, позволяющий NumPy выполнять арифметические операции (и не только) с массивами разной формы. В классической линейной алгебре выполнение математических операций между массивами разных размеров невозможно без соответствующей предварительной обработки. Транслирование в NumPy позволяет автоматически "расширять" один или оба массива таким образом, чтобы их формы становились совместимыми для операции.
Операции между скаляром и массивом:
При выполнении арифметической операции между скаляром и массивом, скаляр "транслируется" (или "распространяется") на все элементы массива.
import numpy as np
arr = np.array([1, 2, 3])
result = arr + 1
print(result) # [2 3 4]
Операции между массивами разной формы:
При сложении одномерного и двумерного массива, одномерный массив может быть "транслирован" для совместимости с формой двумерного.
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([1, 0, 1])
result = arr1 + arr2
print(result)
# [[ 2 2 4]
# [ 5 5 7]
# [ 8 8 10]]
Здесь массив arr2
был транслирован на каждую строку arr1
.
Более сложное транслирование:
import numpy as np
arr1 = np.arange(3).reshape((3, 1))
arr2 = np.arange(3)
result = arr1 + arr2
print(result)
# [[0 1 2]
# [1 2 3]
# [2 3 4]]
В этом примере arr1
имеет форму (3, 1), а arr2
имеет форму (3,). Каждая строка arr1
складывается с arr2
, а результат имеет форму (3, 3).
Правила транслирования:
Транслирование делает работу с NumPy не только гибкой, но и интуитивно понятной, позволяя легко и эффективно выполнять операции над массивами разных форм без явной необходимости в циклах или других манипуляциях.
Векторизация — это процесс выполнения операций над массивами, а не их отдельными элементами. Это ключевая особенность библиотек, предназначенных для научных вычислений, таких как NumPy, позволяющая значительно ускорить операции благодаря оптимизированным низкоуровневым реализациям и эффективному использованию аппаратных ресурсов.
В контексте Python и NumPy, векторизация часто используется для замены явных циклов операциями над массивами. Вместо того чтобы итерироваться по элементам массива, вы выполняете операцию (например, сложение или умножение) над всем массивом одновременно.
Преимущества векторизации:
Примеры векторизации:
Без векторизации: Подсчет квадратов элементов списка.
import numpy as np
data = [1, 2, 3, 4, 5]
squared = []
for item in data:
squared.append(item**2)
print(squared) # [1, 4, 9, 16, 25]
С векторизацией: То же самое с использованием NumPy.
import numpy as np
data = np.array([1, 2, 3, 4, 5])
squared = data**2
print(squared) # [ 1 4 9 16 25]
В приведенном выше примере операция возведения в квадрат применяется ко всему массиву одновременно, без явного указания цикла.
Еще один пример: Умножение двух массивов.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = a * b
print(result) # [4 10 18]
В этом примере каждый элемент массива a умножается на соответствующий элемент массива b
, и это делается одновременно для всех элементов.
Транслирование и векторизация — это две ключевые особенности NumPy, которые делают эту библиотеку такой мощной и удобной для анализа данных и научных вычислений. Они позволяют писать высокопроизводительный, лаконичный и читаемый код без потери гибкости и функциональности.
Содержание: