Spec-Zone.ru › NumPy 1.10

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 : множество, необязательно

Множество строк или целых чисел, представляющих позиционные или именованные аргументы, для которых функция не будет векторизована. Эти аргументы будут переданы непосредственно в 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.10.1/reference/generated/numpy.vectorize.html

Spec-Zone.ru

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