Spec-Zone.ru › NumPy 1.11

numpy.vectorize

class numpy.vectorize(pyfunc, otypes='', doc=None, excluded=None, cache=False) [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.

Возвращает:

vectorized : callable

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

Примечания

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

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

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

Примеры

>>> 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=[np.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])

Методы

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

© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.vectorize.html

Spec-Zone.ru

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