該迭代是'pythonic'。
numpy
確實有一個功能,在這種情況下,可能會更快一點。這不是神奇:
In [142]: a=np.linspace(0,100,10)
In [143]: b=np.linspace(0,50,10) # change to match a size
In [144]: f=np.frompyfunc(test,2,1)
In [145]: c=f(a,b)
In [146]: c
Out[146]:
array([<__main__.test object at 0xb21df12c>,
<__main__.test object at 0xb21dfb2c>,
<__main__.test object at 0xb221a9cc>,
<__main__.test object at 0xb222c44c>,
<__main__.test object at 0xb2213d0c>,
<__main__.test object at 0xb26bc16c>,
<__main__.test object at 0xb2215c0c>,
<__main__.test object at 0xb221598c>,
<__main__.test object at 0xb21eb2cc>,
<__main__.test object at 0xb21ebc6c>], dtype=object)
In [147]: c[0].x,c[1].y
Out[147]: (0.0, 5.555555555555555)
frompyfunc
返回應用於輸入f
到a,b
元素的功能。我將其定義爲獲取2個輸入,並返回1個數組。默認情況下,它會返回一個適合您的情況的對象數組。
np.vectorize
使用這個相同的功能,但有一些開銷,可以使它更容易使用。
它還處理廣播,所以通過改變輸入到列數組我得到一個2D輸出:
In [148]: c=f(a,b[:,None])
In [149]: c.shape
Out[149]: (10, 10)
但是要記住,不是很多,你可以用這個c
做。它只是一個test
實例的列表。例如c+1
不起作用,除非您定義__add__
方法。