使用vectorize将方法应用于numpy数组中的对象会导致空数组

时间:2014-01-08 20:48:46

标签: python numpy vectorization

我想将方法​​应用于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]

提前致谢!

2 个答案:

答案 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