Spec-Zone.ru › NumPy 1.21

numpy.vectorize

class numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)[source]

Обобщённый класс функции.

Определяет векторизованную функцию, которая принимает вложенную последовательность объектов или массивов NumPy в качестве входных данных и возвращает один массив NumPy или кортеж массивов NumPy. Векторизованная функция вычисляет pyfunc над последовательными кортежами входных массивов, подобно функции python map, за исключением того, что она использует правила трансляции NumPy.

Тип данных результата vectorized определяется вызовом функции с первым элементом входных данных. Этого можно избежать, указав аргумент otypes.

Параметры
pyfunccallable

Функция или метод Python.

otypesstr или список типов данных, необязательно

Тип данных выходных данных. Он должен быть указан как строка символов типа или список спецификаторов типов данных. Должен быть один спецификатор типа данных для каждого выходного значения.

docstr, необязательно

Документация функции. Если None, документация будет pyfunc.__doc__.

excludedмножество, необязательно

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

Новая в версии 1.7.0.

cachebool, необязательно

Если True, то кэшировать первый вызов функции, определяющий количество выходных данных, если otypes не предоставлен.

Новая в версии 1.7.0.

signatureстрока, необязательно

Обобщённая подпись универсальной функции, например, (m,n),(n)->(m) для векторизованного умножения матрицы на вектор. Если предоставлено, pyfunc будет вызвана с (и ожидается, что вернёт) массивами с формами, заданными размером соответствующих основных измерений. По умолчанию предполагается, что pyfunc принимает скаляры в качестве входных и выходных данных.

Новая в версии 1.12.0.

Возвращаемые значения
vectorizedcallable

Векторизованная функция.

См. также

frompyfunc

Принимает произвольную функцию Python и возвращает ufunc

Примечания

Функция vectorize предоставляется в основном для удобства, а не для производительности. Реализация по существу представляет собой цикл for.

Если otypes не указан, то вызов функции с первым аргументом будет использован для определения количества выходных данных. Результаты этого вызова будут кэшированы, если cache равен True, чтобы предотвратить вызов функции дважды. Однако для реализации кэша исходная функция должна быть обернута, что замедлит последующие вызовы, поэтому делайте это только в том случае, если ваша функция ресурсоёмкая.

Новый интерфейс ключевых слов и аргумент excluded дополнительно снижают производительность.

Ссылки

1

API обобщённых универсальных функций

Примеры

>>> def myfunc(a, b):
...     "Return a-b if a>b, otherwise return a+b"
...     if a > b:
...         return a - b
...     else:
...         return a + b
>>> vfunc = np.vectorize(myfunc)
>>> vfunc([1, 2, 3, 4], 2)
array([3, 4, 1, 2])

Документация берется из функции-входа для vectorize, если не указана иначе:

>>> vfunc.__doc__
'Return a-b if a>b, otherwise return a+b'
>>> vfunc = np.vectorize(myfunc, doc='Vectorized `myfunc`')
>>> vfunc.__doc__
'Vectorized `myfunc`'

Тип выходных данных определяется путем оценки первого элемента входных данных, если он не указан:

>>> out = vfunc([1, 2, 3, 4], 2)
>>> type(out[0])
<class 'numpy.int64'>
>>> vfunc = np.vectorize(myfunc, otypes=[float])
>>> out = vfunc([1, 2, 3, 4], 2)
>>> type(out[0])
<class 'numpy.float64'>

Аргумент excluded может использоваться для предотвращения векторизации по определённым аргументам. Это может быть полезно для аргументов типа массив фиксированной длины, таких как коэффициенты для многочлена, как в polyval:

>>> def mypolyval(p, x):
...     _p = list(p)
...     res = _p.pop(0)
...     while _p:
...         res = res*x + _p.pop(0)
...     return res
>>> vpolyval = np.vectorize(mypolyval, excluded=['p'])
>>> vpolyval(p=[1, 2, 3], x=[0, 1])
array([3, 6])

Позиционные аргументы также могут быть исключены путём указания их позиции:

>>> vpolyval.excluded.add(0)
>>> vpolyval([1, 2, 3], x=[0, 1])
array([3, 6])

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

>>> import scipy.stats
>>> pearsonr = np.vectorize(scipy.stats.pearsonr,
...                 signature='(n),(n)->(),()')
>>> pearsonr([[0, 1, 2, 3]], [[1, 2, 3, 4], [4, 3, 2, 1]])
(array([ 1., -1.]), array([ 0.,  0.]))

Или для векторизованной свёртки:

>>> convolve = np.vectorize(np.convolve, signature='(n),(m)->(k)')
>>> convolve(np.eye(4), [1, 2, 1])
array([[1., 2., 1., 0., 0., 0.],
       [0., 1., 2., 1., 0., 0.],
       [0., 0., 1., 2., 1., 0.],
       [0., 0., 0., 1., 2., 1.]])

Методы

__call__(*args, **kwargs)

Возвращает массивы с результатами pyfunc трансляции (векторизации) по args и kwargs, не входящие в excluded.

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

Spec-Zone.ru

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