Введение в универсальные функции NumPy

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы изучим основы универсальных функций NumPy (ufuncs). Универсальные функции - это функции, которые работают с многомерными массивами поэлементно, поддерживая широковещание массивов, приведение типов и другие стандартные функции. Мы узнаем о различных методах ufuncs, правилах широковещания, правилах приведения типов и о том, как переопределить поведение ufunc.

Примечание: Вы можете писать код в 08-universal-functions.ipynb. В некоторых шагах некоторые операции вывода опущены, и вы можете выводить результат по необходимости.

Основные арифметические операции

Базовые универсальные функции работают с скалярными значениями, и самый простой пример - это оператор сложения. Посмотрим, как мы можем использовать оператор сложения для поэлементного сложения двух массивов.

import numpy as np

## Создаем два массива
arr1 = np.array([0, 2, 3, 4])
arr2 = np.array([1, 1, -1, 2])

## Складываем массивы поэлементно
result = arr1 + arr2

## Выводим результат
print(result)

Результат:

array([1, 3, 2, 6])

Методы универсальных функций

Универсальные функции имеют четыре метода: reduce, accumulate, reduceat и outer. Эти методы полезны для выполнения операций над массивами. Посмотрим на метод reduce.

import numpy as np

## Создаем массив
arr = np.arange(9).reshape(3, 3)

## Сворачиваем массив вдоль первой оси
result = np.add.reduce(arr, 1)

## Выводим результат
print(result)

Результат:

array([ 3, 12, 21])

Определение типа вывода

Выход универсальной функции не обязательно представляет собой многомерный массив (ndarray), если не все входные аргументы являются ndarrays. Тип вывода может быть определен на основе типов входных данных и правил приведения типов. Посмотрим на пример.

import numpy as np

## Создаем массив
arr = np.arange(9).reshape(3, 3)

## Выполняем умножение и указываем тип вывода
result = np.multiply.reduce(arr, dtype=float)

## Выводим результат
print(result)

Результат:

array([ 0., 28., 80.])

Широковещание (Broadcasting)

Широковещание - это мощный функционал универсальных функций (ufuncs), который позволяет выполнять операции с массивами различных форм. Правила широковещания определяют, как массивы различных форм обрабатываются при операциях. Посмотрим на пример.

import numpy as np

## Создаем два массива
arr1 = np.array([1, 2, 3])
arr2 = np.array([[1], [2], [3]])

## Умножаем массивы
result = arr1 * arr2

## Выводим результат
print(result)

Результат:

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

Правила приведения типов

Приведение типов выполняется для входных данных универсальной функции (ufunc), когда нет реализации ядрового цикла для предоставленных типов входных данных. Правила приведения типов определяют, когда можно безопасно преобразовать один тип данных в другой. Посмотрим на пример.

import numpy as np

## Проверяем, можно ли безопасно преобразовать int в float
result = np.can_cast(np.int, np.float)

## Выводим результат
print(result)

Результат:

True

Переопределение поведения универсальной функции

Классы, в том числе и подклассы ndarray, могут переопределить, как универсальные функции (ufuncs) действуют на них, определяя определенные специальные методы. Это позволяет настроить поведение ufunc. Посмотрим на пример.

import numpy as np

## Определяем пользовательский класс
class MyArray(np.ndarray):
    def __add__(self, other):
        print("Custom add method called")
        return super().__add__(other)

## Создаем экземпляр пользовательского класса
arr = MyArray([1, 2, 3])

## Выполняем сложение
result = arr + 1

## Выводим результат
print(result)

Результат:

Custom add method called
[2 3 4]

Резюме

В этом практическом занятии мы изучили основы универсальных функций (ufuncs) NumPy. Мы изучили различные методы ufuncs, правила широковещания, правила приведения типов и то, как переопределить поведение ufunc. Ufuncs - это мощный инструмент для эффективного выполнения элементарных операций с массивами.