Как указывает Джош Адель, vectorize
оборачивает frompyfunc
. Vectorize добавляет дополнительные функции:
- Копирует строку документации из исходной функции
- Позволяет исключить аргумент из правил трансляции.
- Возвращает массив правильного dtype вместо dtype = object
Редактировать: После небольшого тестирования я обнаружил, что vectorize
значительно медленнее (~ 50%), чем frompyfunc
для больших массивов. Если производительность важна для вашего приложения, сначала сравните ваш пример использования.
`
>>> a = numpy.indices((3,3)).sum(0)
>>> print a, a.dtype
[[0 1 2]
[1 2 3]
[2 3 4]] int32
>>> def f(x,y):
"""Returns 2 times x plus y"""
return 2*x+y
>>> f_vectorize = numpy.vectorize(f)
>>> f_frompyfunc = numpy.frompyfunc(f, 2, 1)
>>> f_vectorize.__doc__
'Returns 2 times x plus y'
>>> f_frompyfunc.__doc__
'f (vectorized)(x1, x2[, out])\n\ndynamic ufunc based on a python function'
>>> f_vectorize(a,2)
array([[ 2, 4, 6],
[ 4, 6, 8],
[ 6, 8, 10]])
>>> f_frompyfunc(a,2)
array([[2, 4, 6],
[4, 6, 8],
[6, 8, 10]], dtype=object)
`