Numpy векторизация с использованием списков в качестве аргументов

Функция 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 работает нормально без векторизации но я бы хотел знать, как (в общем) векторизовать функцию, аргументы которой принимают в виде списков, а не скаляров.

9
задан Hooked 20 December 2010 в 16:48
поделиться