Функция numpy vectorize
полезна, но она плохо себя ведет, когда аргументы функции представляют собой списки, а не скаляры. В качестве примера:
import numpy as np
def f(x, A):
print "type(A)=%s, A=%s"%(type(A),A)
return sum(A)/x
X = np.linspace(1,2,10)
P = [1,2,3]
f2 = np.vectorize(f)
f(X,P)
f2(X,P)
Дает:
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'numpy.int64'>, A=1
Traceback (most recent call last):
File "vectorize.py", line 14, in <module>
f2(X,P)
File "/usr/local/lib/python2.6/dist-packages/numpy/lib/function_base.py", line 1824, in __call__
theout = self.thefunc(*newargs)
File "vectorize.py", line 5, in f
return sum(A)/x
TypeError: 'numpy.int64' object is not iterable
Я понимаю, что функция f работает нормально без векторизации
но я бы хотел знать, как (в общем) векторизовать функцию, аргументы которой принимают в виде списков, а не скаляров.