2014-01-08 20 views
1

我想將方法​​應用於numpy數組中的每個對象。我想用numpy.vectorize來加速,但我得到一個空數組。我無法弄清楚我做錯了什麼。請幫忙!將方法應用於具有向量化的numpy數組中的對象會產生空數組

下面的代碼:

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

一般來說,你不需要爲自定義類定義'set'(或'get')函數:只需使用'Foo_inst.x = y'來設置,其中'Foo_inst'是您的類對象,'x'是所需的屬性,'' y'是它的理想值。即使屬性「x」之前沒有明確定義,也是如此。同樣,只需使用'Foo_inst.x'來獲得它的值。 –

+0

是的,你說得對。這只是我喜歡保留隱私的類別屬性:) – jmborr

回答

1

這是因爲您的SetX方法沒有返回值。解決這個問題的一種方法是通過改寫SetX作爲

def SetX(self, x): 
    self.x = x 
    return self 
2

的問題是,lambda函數的返回值是無(的Foo.SetX的結果),你可以這樣做:

def f(foo): 
    foo.SetX(3.45) 
    return foo 
xsetter = numpy.vectorize(f)