Spec-Zone.ru › NumPy 1.20

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 or list of dtypes, optional

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

docstr, optional

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

excludedset, optional

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

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

cachebool, optional

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

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

signaturestring, optional

Обобщенная сигнатура универсальной функции, например, (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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.vectorize.html

Spec-Zone.ru

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