Spec-Zone.ru › NumPy 1.21

Универсальные функции (ufunc)

Универсальная функция (или ufunc для краткости) — это функция, которая работает с ndarrays поэлементно, поддерживая векторное сложение, преобразование типов и ряд других стандартных функций. То есть ufunc — это «векторизованная» оболочка для функции, принимающей фиксированное количество определённых входных данных и производящей фиксированное количество определённых выходных данных.

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

Векторное сложение

Каждая универсальная функция принимает массивы в качестве входных данных и производит массивы вывода, выполняя основную функцию поэлементно на входных данных (где элемент обычно является скаляром, но может быть вектором или подмассивом более высокого порядка для обобщённых ufuncs). Применяются стандартные правила векторизации, поэтому входные данные, не имеющие точно одинаковых форм, всё ещё могут быть использованы в вычислениях. Векторное сложение можно понять по четырём правилам:

  1. Все входные массивы с ndim меньше, чем входной массив с наибольшим ndim, имеют 1 в начале их форм.
  2. Размер в каждом измерении формы выходного массива является максимальным из всех размеров входных массивов в этом измерении.
  3. Вводной массив может быть использован в вычислении, если его размер в определённом измерении либо совпадает с размером выходного массива в этом измерении, либо имеет значение ровно 1.
  4. Если у входного массива размер измерения в его форме равен 1, то первое значение в этом измерении будет использоваться для всех вычислений вдоль этого измерения. Другими словами, механизм шагов ufunc просто не будет шагать по этому измерению (шаг шага будет равен 0 для этого измерения).

Векторное сложение используется в NumPy для определения способа обработки массивов с различными формами; например, все арифметические операции (+, -, *, …) между ndarrays векторизуют массивы перед операцией.

Набор массивов называется «совместимым» с одинаковой формой, если вышеперечисленные правила приводят к правильному результату, т. е., выполняется одно из следующих условий:

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

Пример

Если a.shape — (5,1), b.shape — (1,6), c.shape — (6,) и d.shape — (), так что d — скаляр, то a, b, c и d все векторизуются в размерность (5,6); и

  • a ведет себя как массив (5,6), где a[:,0] векторизуется в другие столбцы,
  • b ведет себя как массив (5,6), где b[0,:] векторизуется в другие строки,
  • c ведет себя как массив (1,6) и поэтому как массив (5,6), где c[:] векторизуется в каждую строку, и, наконец,
  • d ведет себя как массив (5,6), где единственное значение повторяется.

Определение типа результата

Результат ufunc (и его методов) необязательно является ndarray, если все входные аргументы не являются ndarrays. Действительно, если какой-либо входной аргумент определяет метод __array_ufunc__, управление полностью передаётся этой функции, то есть ufunc переопределяется.

Если ни один из входных аргументов не переопределяет ufunc, то все выходные массивы будут переданы методам __array_prepare__ и __array_wrap__ входных данных (кроме ndarrays и скаляров), которые его определяют и имеют наивысший __array_priority__ из всех других входных данных универсальной функции. Значение по умолчанию __array_priority__ для ndarray равно 0,0, а значение по умолчанию __array_priority__ для подтипов равно 0,0. У матриц __array_priority__ равно 10,0.

Все ufuncs также могут принимать аргументы вывода. При необходимости выходные данные будут преобразованы к типу данных(ов) предоставленного(ых) выходного(ых) массива(ов). Если для вывода используется класс с методом __array__, результаты будут записаны в объект, возвращаемый методом __array__. Затем, если у класса также есть метод __array_prepare__, он вызывается для определения метаданных на основе контекста ufunc (контекст состоит из самого ufunc, аргументов, переданных ufunc, и области ufunc). Объект массива, возвращённый методом __array_prepare__, передаётся ufunc для вычисления. Наконец, если у класса также есть метод __array_wrap__, возвращаемый ndarray результат будет передан этому методу перед передачей управления обратно вызывающей стороне.

Использование внутренних буферов

Внутри буферы используются для невыровненных данных, данных, которые нужно перевернуть, и данных, которые нужно преобразовать из одного типа данных в другой. Размер внутренних буферов настраивается для каждого потока. Может быть создано до \(2 (n_{\mathrm{inputs}} + n_{\mathrm{outputs}})\) буферов указанного размера для обработки данных со всех входных и выходных данных ufunc. Размер буфера по умолчанию составляет 10 000 элементов. Всякий раз, когда требуется вычисление на основе буфера, но все входные массивы меньше размера буфера, эти массивы с неправильным поведением или типом будут скопированы перед началом вычислений. Таким образом, изменение размера буфера может изменить скорость выполнения вычислений ufunc различных типов.

setbufsize(size)

Установите размер буфера, используемого в ufuncs.

Обработка ошибок

Универсальные функции могут вызывать специальные регистры состояния операций с плавающей точкой в вашем оборудовании (например, деление на ноль). Если доступны на вашей платформе, эти регистры будут регулярно проверяться во время вычислений. Обработка ошибок контролируется для каждого потока и может быть настроена с помощью функций

seterr([all, divide, over, under, invalid])

Установите способ обработки ошибок с плавающей точкой.

seterrcall(func)

Установите функцию обратного вызова или объект журнала ошибок с плавающей точкой.

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

Примечание

В NumPy 1.6.0 был создан API для повышения типа, чтобы инкапсулировать механизм определения типов выходных данных. Подробнее см. функции result_type, promote_types и min_scalar_type.

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

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

Примечание

Универсальные функции в NumPy достаточно гибкие, чтобы иметь смешанные сигнатуры типов. Таким образом, например, можно определить универсальную функцию, которая работает с плавающей точкой и целыми значениями. См. ldexp для примера.

Согласно вышеизложенному описанию, правила преобразования в основном реализуются вопросом, когда тип данных может быть преобразован «безопасно» в другой тип данных. На этот вопрос можно ответить в Python с помощью вызова функции: can_cast(fromtype, totype). На рисунке ниже показаны результаты этого вызова для 24 поддерживаемых внутри типов на 64-битной системе автора. Вы можете сгенерировать эту таблицу для вашей системы с помощью кода, приведённого на рисунке.

Рисунок

Фрагмент кода, показывающий таблицу «безопасное преобразование» для 64-битной системы. Как правило, вывод зависит от системы; ваша система может привести к другой таблице.

>>> mark = {False: ' -', True: ' Y'}
>>> def print_table(ntypes):
...     print('X ' + ' '.join(ntypes))
...     for row in ntypes:
...         print(row, end='')
...         for col in ntypes:
...             print(mark[np.can_cast(row, col)], end='')
...         print()
...
>>> print_table(np.typecodes['All'])
X ? b h i l q p B H I L Q P e f d g F D G S U V O M m
? Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y - Y
b - Y Y Y Y Y Y - - - - - - Y Y Y Y Y Y Y Y Y Y Y - Y
h - - Y Y Y Y Y - - - - - - - Y Y Y Y Y Y Y Y Y Y - Y
i - - - Y Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
l - - - - Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
q - - - - Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
p - - - - Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
B - - Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y - Y
H - - - Y Y Y Y - Y Y Y Y Y - Y Y Y Y Y Y Y Y Y Y - Y
I - - - - Y Y Y - - Y Y Y Y - - Y Y - Y Y Y Y Y Y - Y
L - - - - - - - - - - Y Y Y - - Y Y - Y Y Y Y Y Y - -
Q - - - - - - - - - - Y Y Y - - Y Y - Y Y Y Y Y Y - -
P - - - - - - - - - - Y Y Y - - Y Y - Y Y Y Y Y Y - -
e - - - - - - - - - - - - - Y Y Y Y Y Y Y Y Y Y Y - -
f - - - - - - - - - - - - - - Y Y Y Y Y Y Y Y Y Y - -
d - - - - - - - - - - - - - - - Y Y - Y Y Y Y Y Y - -
g - - - - - - - - - - - - - - - - Y - - Y Y Y Y Y - -
F - - - - - - - - - - - - - - - - - Y Y Y Y Y Y Y - -
D - - - - - - - - - - - - - - - - - - Y Y Y Y Y Y - -
G - - - - - - - - - - - - - - - - - - - Y Y Y Y Y - -
S - - - - - - - - - - - - - - - - - - - - Y Y Y Y - -
U - - - - - - - - - - - - - - - - - - - - - Y Y Y - -
V - - - - - - - - - - - - - - - - - - - - - - Y Y - -
O - - - - - - - - - - - - - - - - - - - - - - - Y - -
M - - - - - - - - - - - - - - - - - - - - - - Y Y Y -
m - - - - - - - - - - - - - - - - - - - - - - Y Y - Y

Следует отметить, что, хотя они включены в таблицу для полноты, типы «S», «U» и «V» не могут обрабатываться ufunc. Также обратите внимание, что на 32-битной системе целые типы могут иметь разные размеры, что приводит к несколько изменённой таблице.

Смешанные операции скаляр-массив используют другой набор правил преобразования, гарантирующих, что скаляр не может «поднимать» массив, если скаляр не является фундаментально отличного типа данных (т.е., под другим уровнем в иерархии типов данных), чем массив. Это правило позволяет использовать скалярные константы в вашем коде (которые, как типы Python, интерпретируются соответствующим образом в ufunc), не беспокоясь о том, повлияет ли точность скалярной константы на повышение точности вашего большого (малой точности) массива.

Переопределение поведения Ufunc

Классы (включая подклассы ndarray) могут переопределить, как ufunc действуют на них, определив некоторые специальные методы. Для получения подробностей см. Стандартные подклассы массивов.

ufunc

numpy.ufunc()

Функции, которые работают поэлементно со всем массивами.

Необязательные ключевые аргументы

Все ufunc принимают необязательные ключевые аргументы. Большинство из них представляют расширенное использование и обычно не используются.

out

Введено в версии 1.6.

Первый вывод может быть предоставлен как позиционный, так и ключевой параметр. Ключевые аргументы ‘out’ несовместимы с позиционными.

Введено в версии 1.10.

Ключевой аргумент ‘out’ ожидается в виде кортежа с одной записью на вывод (который может быть None для массивов, выделяемых ufunc). Для ufunc с одним выводом также допустимо передать один массив (вместо кортежа, содержащего один массив).

Передача одного массива в ключевом аргументе ‘out’ ufunc с несколькими выходами устарела и будет выводить предупреждение в numpy 1.10 и ошибку в будущей версии.

Если ‘out’ равно None (по умолчанию), создаётся неинициализированный массив возврата. Затем массив вывода заполняется результатами ufunc в тех местах, где трансляция ‘where’ равна True. Если ‘where’ равен скалярному True (по умолчанию), то это соответствует заполнению всего вывода. Обратите внимание, что выводы, которые явно не заполнены, сохраняют свои неинициализированные значения.

Введено в версии 1.13.

Операции, где входные и выходные операнды ufunc имеют перекрытие памяти, определяются так же, как и для эквивалентных операций, где памяти нет. Для устранения зависимости данных выполняются временные копии по мере необходимости. Поскольку определение таких случаев вычислительно дорого, используется эвристика, которая в редких случаях может привести к ненужным временным копиям. Для операций, где зависимость данных достаточно проста для анализа эвристикой, временные копии не будут создаваться, даже если массивы перекрываются, если можно предположить, что копии не нужны. Например, np.add(a, b, out=a) не будет вовлечь копий.

where

Введено в версии 1.7.

Принимает булевский массив, который транслируется вместе с операндами. Значения True указывают на вычисление ufunc в этом положении, значения False указывают на оставление значения в выводе в покое. Этот аргумент нельзя использовать для обобщённых ufunc, поскольку они принимают нескалярный вход.

Обратите внимание, что если создаётся неинициализированный массив возврата, значения False оставят эти значения неинициализированными.

axes

Введено в версии 1.15.

Список кортежей с индексами осей, по которым должен работать обобщённый ufunc. Например, для сигнатуры (i,j),(j,k)->(i,k) соответствующей матричному умножению, базовые элементы — это двумерные матрицы, и они предполагаются хранящимися в двух последних осях каждого аргумента. Соответствующий ключевой аргумент axes будет [(-2, -1), (-2, -1), (-2, -1)]. Для простоты, для обобщённых ufunc, работающих с одномерными массивами (векторами), принимается одно целое число вместо кортежа из одного элемента, а для обобщённых ufunc, для которых все выводы являются скалярными, кортежи вывода можно опустить.

axis

Введено в версии 1.15.

Одна ось, по которой обобщённый ufunc должен работать. Это сокращение для ufunc, которые работают по одной общей основной размерности, эквивалентное передаче axes со значениями (axis,) для каждого аргумента с одной основной размерностью и () для всех остальных. Например, для сигнатуры (i),(i)->(), это эквивалентно передаче axes=[(axis,), (axis,), ()].

keepdims

Введено в версии 1.15.

Если это установлено в True, оси, по которым производится сокращение, будут оставаться в результате как размерность с размером один, чтобы результат корректно транслировался по отношению к входам. Этот параметр может использоваться только для обобщённых ufunc, которые работают с входами, которые все имеют одинаковое количество основных измерений, и с выходами, которые не имеют основных измерений, то есть с сигнатурами, такими как (i),(i)->() или (m,m)->(). При использовании положение измерений в выводе можно контролировать с помощью axes и axis.

casting

Введено в версии 1.6.

Может быть ‘no’, ‘equiv’, ‘safe’, ‘same_kind’, или ‘unsafe’. См. can_cast для объяснений значений параметров.

Предоставляет политику для разрешённых преобразований. Для совместимости с предыдущими версиями NumPy по умолчанию установлено ‘unsafe’ для numpy < 1.7. В numpy 1.7 началось переход к ‘same_kind’, где ufunc создаёт DeprecationWarning для вызовов, которые разрешены по правилам ‘unsafe’, но не по правилам ‘same_kind’. В numpy 1.10 и далее значение по умолчанию — ‘same_kind’.

order

Введено в версии 1.6.

Устанавливает порядок итерации/структуру памяти массива вывода. По умолчанию ‘K’. ‘C’ означает, что вывод должен быть C-непрерывным, ‘F’ означает F-непрерывным, ‘A’ означает F-непрерывным, если входные данные F-непрерывны и не C-непрерывны, в противном случае C-непрерывный, а ‘K’ означает, что нужно максимально соответствовать порядку элементов входных данных.

dtype

Введено в версии 1.6.

Переопределяет тип данных выходных массивов так же, как и signature. Это должно обеспечить соответствие точности вычислений. Точные выбранные типы данных вычислений могут зависеть от ufunc, и входные данные могут быть преобразованы к этому типу данных для выполнения вычислений.

subok

Введено в версии 1.6.

По умолчанию true. Если установлено в false, вывод всегда будет строгим массивом, а не подтипом.

signature

Тип данных, кортеж типов данных или специальная строка сигнатуры, указывающая типы входных и выходных данных ufunc.

Этот аргумент позволяет пользователю указать точные типы данных, которые будут использоваться для вычислений. Необходимое преобразование будет применено. Фактический тип данных входных массивов не учитывается, если signature не None для этого массива.

Когда все типы данных фиксированы, выбирается определённый цикл или генерируется ошибка, если соответствующий цикл не существует. Если некоторые типы данных не указаны и оставлены None, поведение может зависеть от ufunc. В настоящее время список доступных сигнатур предоставляется атрибутом types ufunc. (В этом списке могут отсутствовать типы данных, не определённые NumPy.)

signature указывает только класс/тип типа данных. Например, он может указать, что операция должна быть datetime64 или float64 операцией. Он не указывает datetime64 единицы измерения времени или float64 порядок байтов.

Для обратной совместимости этот аргумент также может быть передан как sig, хотя предпочтительнее использовать полную форму. Обратите внимание, что это не следует путать с обобщенной функцией ufunc подпись, которая хранится в атрибуте signature объекта ufunc.

extobj

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

Атрибуты

Существуют некоторые информационные атрибуты, которыми обладают универсальные функции. Ни один из атрибутов не может быть изменен.

__doc__

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

__name__

Имя функции ufunc.

ufunc.nin

Количество входов.

ufunc.nout

Количество выходов.

ufunc.nargs

Количество аргументов.

ufunc.ntypes

Количество типов.

ufunc.types

Возвращает список с типами, сгруппированными вход->выход.

ufunc.identity

Значение тождества.

ufunc.signature

Определение основных элементов, на которых работает обобщенная функция ufunc.

Методы

Все функции ufunc имеют четыре метода. Однако эти методы имеют смысл только для скалярных функций ufunc, принимающих два входных аргумента и возвращающих один выходной аргумент. Попытка вызвать эти методы для других функций ufunc приведет к ValueError. Методы, похожие на reduce, все принимают ключевое слово axis, ключевое слово dtype и ключевое слово out, а массивы должны иметь размерность >= 1. Ключевое слово axis задает ось массива, по которой будет выполняться уменьшение (с отрицательными значениями, отсчитываемыми назад). Обычно это целое число, хотя для ufunc.reduce оно также может быть кортежем из int для уменьшения по нескольким осям одновременно или None для уменьшения по всем осям. Ключевое слово dtype позволяет управлять очень распространенной проблемой, возникающей при небрежном использовании ufunc.reduce. Иногда у вас может быть массив определенного типа данных, и вы хотите сложить все его элементы, но результат не помещается в тип данных массива. Это часто происходит, если у вас есть массив целых чисел с одним байтом. Ключевое слово dtype позволяет изменить тип данных, по которому выполняется уменьшение (и, следовательно, тип выходного значения). Таким образом, вы можете убедиться, что выходной тип имеет точность, достаточную для обработки вашего результата. Ответственность за изменение типа reduce в основном лежит на вас. Есть одно исключение: если для операции reduce с операциями «сложение» или «умножение» не задан dtype, то если входной тип — целого (или булевого) типа данных и меньше размера типа данных int_, он будет неявно преобразован к типу данных int_ (или uint). Наконец, ключевое слово out позволяет указать выходной массив (для функций ufunc с одним выходом, которые в настоящее время поддерживаются; для будущих расширений можно передать кортеж с одним аргументом). Если задано out, то аргумент dtype игнорируется.

Функции ufunc также имеют пятый метод, который позволяет выполнять операции на месте с помощью индексации с помощью элементов.

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

ufunc.reduce(array[, axis, dtype, out, …])

Уменьшает размерность array на один, применяя ufunc вдоль одной оси.

ufunc.accumulate(array[, axis, dtype, out])

Накапливает результат применения оператора ко всем элементам.

ufunc.reduceat(array, indices[, axis, …])

Выполняет (локальное) уменьшение с указанными срезами по одной оси.

ufunc.outer(A, B, /, **kwargs)

Применяет функцию ufunc op ко всем парам (a, b) с a в A и b в B.

ufunc.at(a, indices[, b])

Выполняет неограниченную операцию на месте на операнде ‘a’ для элементов, указанных ‘indices’.

Предупреждение

Операция reduce на массиве с типом данных, у которого диапазон «слишком мал», чтобы обработать результат, будет молча оборачиваться. Следует использовать dtype для увеличения размера типа данных, по которому выполняется уменьшение.

Доступные функции ufunc

В настоящее время в numpy определены более 60 универсальных функций для одного или нескольких типов, охватывающих широкий спектр операций. Некоторые из этих функций ufunc вызываются автоматически для массивов при использовании соответствующей инфиксной записи (например, add(a, b) вызывается неявно при записи a + b и a или b является ndarray). Тем не менее, вы по-прежнему можете использовать вызов функции ufunc, чтобы использовать необязательный выходной аргумент(ы) для размещения выходного(ых) значения(й) в объекте(ах) по вашему выбору.

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

Примечание

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

Математические операции

add(x1, x2, /[, out, where, casting, order, …])

Элемент-но складывает аргументы.

subtract(x1, x2, /[, out, where, casting, …])

Вычитает аргументы, поэлементно.

multiply(x1, x2, /[, out, where, casting, …])

Умножает аргументы, поэлементно.

matmul(x1, x2, /[, out, casting, order, …])

Матричное произведение двух массивов.

divide(x1, x2, /[, out, where, casting, …])

Возвращает результат истинного деления операндов, поэлементно.

logaddexp(x1, x2, /[, out, where, casting, …])

Логарифм суммы экспоненциальных значений аргументов.

logaddexp2(x1, x2, /[, out, where, casting, …])

Логарифм суммы экспоненциальных значений аргументов в двоичной системе.

true_divide(x1, x2, /[, out, where, …])

Возвращает результат истинного деления операндов, поэлементно.

floor_divide(x1, x2, /[, out, where, …])

Возвращает наибольшее целое число, меньшее или равное результату деления операндов.

negative(x, /[, out, where, casting, order, …])

Поэлементное вычисление числового отрицания.

positive(x, /[, out, where, casting, order, …])

Поэлементное вычисление числового положительного значения.

power(x1, x2, /[, out, where, casting, …])

Возведение элементов первого массива в степень из элементов второго массива, поэлементно.

float_power(x1, x2, /[, out, where, …])

Возведение элементов первого массива в степень из элементов второго массива, поэлементно.

remainder(x1, x2, /[, out, where, casting, …])

Возвращает остаток от деления, поэлементно.

mod(x1, x2, /[, out, where, casting, order, …])

Возвращает остаток от деления, поэлементно.

fmod(x1, x2, /[, out, where, casting, …])

Возвращает остаток от деления, поэлементно.

divmod(x1, x2[, out1, out2], / [[, out, …])

Возвращает частное и остаток от деления, поэлементно.

absolute(x, /[, out, where, casting, order, …])

Вычисляет абсолютное значение, поэлементно.

fabs(x, /[, out, where, casting, order, …])

Вычисляет абсолютные значения, поэлементно.

rint(x, /[, out, where, casting, order, …])

Округляет элементы массива до ближайшего целого числа.

sign(x, /[, out, where, casting, order, …])

Возвращает указание знака числа, поэлементно.

heaviside(x1, x2, /[, out, where, casting, …])

Вычисляет функцию Хевисайда.

conj(x, /[, out, where, casting, order, …])

Возвращает комплексно сопряжённое значение, поэлементно.

conjugate(x, /[, out, where, casting, …])

Возвращает комплексно сопряжённое значение, поэлементно.

exp(x, /[, out, where, casting, order, …])

Вычисляет экспоненту от всех элементов входного массива.

exp2(x, /[, out, where, casting, order, …])

Вычисляет 2x для всех элементов входного массива.

log(x, /[, out, where, casting, order, …])

Натуральный логарифм, поэлементно.

log2(x, /[, out, where, casting, order, …])

Двоичный логарифм от элементов.

log10(x, /[, out, where, casting, order, …])

Возвращает десятичный логарифм входного массива, поэлементно.

expm1(x, /[, out, where, casting, order, …])

Вычисляет ex - 1 для всех элементов массива.

log1p(x, /[, out, where, casting, order, …])

Возвращает натуральный логарифм от единицы плюс входной массив, поэлементно.

sqrt(x, /[, out, where, casting, order, …])

Возвращает неотрицательный квадратный корень из массива, поэлементно.

square(x, /[, out, where, casting, order, …])

Возвращает поэлементную степень элементов массива в квадрат.

cbrt(x, /[, out, where, casting, order, …])

Возвращает кубический корень из массива, поэлементно.

reciprocal(x, /[, out, where, casting, …])

Возвращает обратную величину аргумента, поэлементно.

gcd(x1, x2, /[, out, where, casting, order, …])

Возвращает наибольший общий делитель |x1| и |x2|.

lcm(x1, x2, /[, out, where, casting, order, …])

Возвращает наименьшее общее кратное |x1| и |x2|

Подсказка

Дополнительные выходные аргументы могут помочь сэкономить память для больших вычислений. Если ваши массивы большие, сложные выражения могут занимать больше времени, чем необходимо, из-за создания и (позже) уничтожения временных областей вычислений. Например, выражение G = A * B + C эквивалентно T1 = A * B; G = T1 + C; del T1. Оно будет выполняться быстрее как G = A * B; add(G, C, G), что то же самое, что G = A * B; G += C.

Тригонометрические функции

Все тригонометрические функции используют радианы, когда требуется угол. Соотношение градусов к радианам составляет \(180^{\circ}/\pi.\)

sin(x, /[, out, where, casting, order, …])

Тригонометрический синус, поэлементно.

cos(x, /[, out, where, casting, order, …])

Косинус поэлементно.

tan(x, /[, out, where, casting, order, …])

Вычисление тангенса поэлементно.

arcsin(x, /[, out, where, casting, order, …])

Обратный синус, поэлементно.

arccos(x, /[, out, where, casting, order, …])

Обратный тригонометрический косинус, поэлементно.

arctan(x, /[, out, where, casting, order, …])

Обратный тригонометрический тангенс, поэлементно.

arctan2(x1, x2, /[, out, where, casting, …])

Поэлементная арктангенс x1/x2, правильно выбирая квадрант.

hypot(x1, x2, /[, out, where, casting, …])

Зная “катеты” прямоугольного треугольника, верните его гипотенузу.

sinh(x, /[, out, where, casting, order, …])

Гиперболический синус, поэлементно.

cosh(x, /[, out, where, casting, order, …])

Гиперболический косинус, поэлементно.

tanh(x, /[, out, where, casting, order, …])

Вычислить гиперболический тангенс поэлементно.

arcsinh(x, /[, out, where, casting, order, …])

Обратный гиперболический синус поэлементно.

arccosh(x, /[, out, where, casting, order, …])

Обратный гиперболический косинус, поэлементно.

arctanh(x, /[, out, where, casting, order, …])

Обратный гиперболический тангенс поэлементно.

degrees(x, /[, out, where, casting, order, …])

Преобразование углов из радиан в градусы.

radians(x, /[, out, where, casting, order, …])

Преобразование углов из градусов в радианы.

deg2rad(x, /[, out, where, casting, order, …])

Преобразование углов из градусов в радианы.

rad2deg(x, /[, out, where, casting, order, …])

Преобразование углов из радиан в градусы.

Функции битового манипулирования

Все эти функции требуют целочисленных аргументов и манипулируют битовым представлением этих аргументов.

bitwise_and(x1, x2, /[, out, where, …])

Вычислить побитовую AND двух массивов поэлементно.

bitwise_or(x1, x2, /[, out, where, casting, …])

Вычислить побитовую OR двух массивов поэлементно.

bitwise_xor(x1, x2, /[, out, where, …])

Вычислить побитовую XOR двух массивов поэлементно.

invert(x, /[, out, where, casting, order, …])

Вычислить побитовое инвертирование, или побитовое NOT, поэлементно.

left_shift(x1, x2, /[, out, where, casting, …])

Сдвинуть биты целого числа влево.

right_shift(x1, x2, /[, out, where, …])

Сдвинуть биты целого числа вправо.

Функции сравнения

greater(x1, x2, /[, out, where, casting, …])

Возвращает логическое значение (x1 > x2) поэлементно.

greater_equal(x1, x2, /[, out, where, …])

Возвращает логическое значение (x1 >= x2) поэлементно.

less(x1, x2, /[, out, where, casting, …])

Возвращает логическое значение (x1 < x2) поэлементно.

less_equal(x1, x2, /[, out, where, casting, …])

Возвращает логическое значение (x1 <= x2) поэлементно.

not_equal(x1, x2, /[, out, where, casting, …])

Возвращает (x1 != x2) поэлементно.

equal(x1, x2, /[, out, where, casting, …])

Возвращает (x1 == x2) поэлементно.

Предупреждение

Не используйте ключевые слова Python and и or для объединения логических выражений массивов. Эти ключевые слова будут проверять истинность всего массива (а не по элементу, как вы, возможно, ожидаете). Используйте побитовые операторы & и | вместо этого.

logical_and(x1, x2, /[, out, where, …])

Вычислить логическое значение x1 AND x2 поэлементно.

logical_or(x1, x2, /[, out, where, casting, …])

Вычислить логическое значение x1 OR x2 поэлементно.

logical_xor(x1, x2, /[, out, where, …])

Вычислить логическое значение x1 XOR x2 поэлементно.

logical_not(x, /[, out, where, casting, …])

Вычислить логическое значение NOT x поэлементно.

Предупреждение

Побитовые операторы & и | — это правильный способ выполнения поэлементных сравнений массивов. Убедитесь, что вы понимаете приоритет операторов: (a > 2) & (a < 5) — правильный синтаксис, потому что a > 2 & a < 5 приведет к ошибке из-за того, что 2 & a вычисляется первым.

maximum(x1, x2, /[, out, where, casting, …])

Поэлементное максимальное значение элементов массива.

Подсказка

Функция Python max() найдет максимум по одномерному массиву, но сделает это с помощью более медленного интерфейса последовательности. Метод reduce функции ufunc maximum намного быстрее. Также метод max() не даст ожидаемых результатов для массивов с более чем одной размерностью. Метод reduce для минимума также позволяет вычислить общий минимум по массиву.

minimum(x1, x2, /[, out, where, casting, …])

Поэлементное минимальное значение элементов массива.

Предупреждение

Поведение maximum(a, b) отличается от max(a, b). Как функция ufunc, maximum(a, b) выполняет поэлементное сравнение a и b и выбирает каждый элемент результата в зависимости от того, какой элемент в двух массивах больше. В отличие от этого, max(a, b) обрабатывает объекты a и b как единое целое, рассматривает (общую) истинность a > b и использует ее для возврата a или b (в целом). Аналогичное различие существует между minimum(a, b) и min(a, b).

fmax(x1, x2, /[, out, where, casting, …])

Максимальное значение элементов массива.

fmin(x1, x2, /[, out, where, casting, …])

Минимальное значение элементов массива.

Функции с плавающей запятой

Обратите внимание, что все эти функции работают поэлементно над массивом, возвращая массив результатов. Подробное описание содержит только одну операцию.

isfinite(x, /[, out, where, casting, order, …])

Проверка по каждому элементу на конечность (не бесконечность и не число Not a Number).

isinf(x, /[, out, where, casting, order, …])

Проверка по каждому элементу на положительную или отрицательную бесконечность.

isnan(x, /[, out, where, casting, order, …])

Проверка по каждому элементу на NaN и возвращение результата в виде булевого массива.

isnat(x, /[, out, where, casting, order, …])

Проверка по каждому элементу на NaT (не время) и возвращение результата в виде булевого массива.

fabs(x, /[, out, where, casting, order, …])

Вычисление абсолютных значений поэлементно.

signbit(x, /[, out, where, casting, order, …])

Возвращает значение True по каждому элементу, где установлен бит знака (меньше нуля).

copysign(x1, x2, /[, out, where, casting, …])

Изменение знака x1 на знак x2 поэлементно.

nextafter(x1, x2, /[, out, where, casting, …])

Возвращает следующее значение с плавающей запятой после x1 в направлении x2 поэлементно.

spacing(x, /[, out, where, casting, order, …])

Возвращает расстояние между x и ближайшим смежным числом.

modf(x[, out1, out2], / [[, out, where, …])

Возвращает дробную и целую части массива поэлементно.

ldexp(x1, x2, /[, out, where, casting, …])

Возвращает x1 * 2**x2 поэлементно.

frexp(x[, out1, out2], / [[, out, where, …])

Разложение элементов x на мантиссу и показатель степени двойки.

fmod(x1, x2, /[, out, where, casting, …])

Возвращает остаток от деления поэлементно.

floor(x, /[, out, where, casting, order, …])

Возвращает наименьшее целое число, большее или равное входному значению поэлементно.

ceil(x, /[, out, where, casting, order, …])

Возвращает наибольшее целое число, меньшее или равное входному значению поэлементно.

trunc(x, /[, out, where, casting, order, …])

Возвращает усеченное значение входного значения поэлементно.

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/ufuncs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API