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

2024-04-20 13:54:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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更改并且不能被缓存,因为它是在这个类之外生成的一个点。当然,这是非常缓慢和不太明亮。我该如何改进?你知道吗

谢谢!你知道吗


Tags: 方法inself算法an应用程序forget
2条回答

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匹配,并更改了代码中的一个符号错误。你知道吗

简单地说,尝试在更高的抽象级别上进行计算,即尝试避免python级别的循环。你知道吗

仔细学习如何进行元素操作和broadcasting如何操作,最后但同样重要的是不要忘记linear algebra的强大功能!你知道吗

相关问题 更多 >