Spec-Zone.ru › NumPy 1.17

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.

Параметры:
pyfunc : callable

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

otypes : str or list of dtypes, optional

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

doc : str, optional

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

excluded : set, optional

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

Добавлена в версии 1.7.0.

cache : bool, optional

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

Добавлена в версии 1.7.0.

signature : string, optional

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

Добавлена в версии 1.12.0.

Возвращаемое значение:
vectorized : callable

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

См. также

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

Примечания

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

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

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

Ссылки

[R5cc1f1f25381-1] Справочник 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])
<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__(self, \*args, \*\*kwargs) Возвращает массивы с результатами pyfunc векторизованного вычисления над args и kwargs не входящими в excluded.

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

Spec-Zone.ru

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