我想将方法应用于numpy数组中的每个对象。我想过使用numpy.vectorize来加快速度,但我得到了一个空数组。我无法弄清楚我做错了什么。请帮忙!
以下是代码:
import numpy
class Foo(object):
def __init__(self):
self.x = None
def SetX(self, x):
self.x = x
# Initialize and array of Foo objects
y = numpy.empty( 3, dtype=object )
vFoo = numpy.vectorize(lambda x: Foo() )
yfoo = vFoo(y)
# Apply method SetX to each object
xsetter = numpy.vectorize( lambda foo: foo.SetX(3.45) )
print xsetter(yfoo) #[None None None]
提前致谢!
答案 0 :(得分:2)
问题是lambda函数的返回值是None(Foo.SetX
的结果),你可以这样做:
def f(foo):
foo.SetX(3.45)
return foo
xsetter = numpy.vectorize( f )
答案 1 :(得分:1)
这是因为您的SetX
方法未返回值。解决此问题的一种方法是将SetX
重写为
def SetX(self, x):
self.x = x
return self