Python:有效地生成具有不同值的向量

时间:2011-03-31 18:24:17

标签: python numpy scipy

我正在使用Python编写一个科学应用程序,到目前为止我的算法的性能很糟糕。我正试图找到一种有效的方法来编码我正在做的事情。基本上,我必须乘以

 def get_thing(self, chi, n):

    return np.sum(self.an[n][j] * pow(chi, -j) for j in xrange(1, self.j))

其中self.an[i][j]是先前生成的数组。然后我必须这样做:

 pot = np.sum(self.coeffs[n] * self.get_thing(chi, n) for n in xrange(0, self.n))

其中chi发生变化且无法缓存,因为它是在此类之外生成的一个点。当然,这是非常缓慢而且不是很明亮。我怎样才能改善这个?

谢谢!

2 个答案:

答案 0 :(得分:1)

简单地说,尝试在更高级别的抽象中进行计算,即尽量避免使用python级别循环。

仔细研究如何进行元素操作以及broadcasting如何操作,最后但并非最不重要的是不要忘记linear algebra的力量!

答案 1 :(得分:1)

get_things内你可以简单地简化:

def get_thing(self, chi, n):

    return np.sum(self.an[n,1:self.j] * np.power(chi,-np.arange(1,self.j)))

注意,您不希望使用[i] [j]表示法索引numpy数组;而是使用[i,j]。

您可以使用更高级别的广播进行进一步改进,如@eat建议的那样。

修改 对上面的代码做了一些更改,试图让索引与OP匹配,并在我的代码中更改了一个符号错误。