Spec-Zone.ru › NumPy 1.14

numpy.vectorize

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

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

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

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

Параметры:

pyfunc : callable

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

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

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

doc : str, необязательно

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

excluded : set, необязательно

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

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

cache : bool, необязательно

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

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

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

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

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

Возвращает:

vectorized : callable

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

См. также

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

Примечания

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

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

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

Ссылки

[R297] Справочник NumPy, раздел 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])
<type 'numpy.int32'>
>>> vfunc = np.vectorize(myfunc, otypes=[float])
>>> out = vfunc([1, 2, 3, 4], 2)
>>> type(out[0])
<type '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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.14.5/reference/generated/numpy.vectorize.html

Spec-Zone.ru

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