我正在用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
更改并且不能被缓存,因为它是在这个类之外生成的一个点。当然,这是非常缓慢和不太明亮。我该如何改进?你知道吗
谢谢!你知道吗
在
get_things
中,您当然可以将事情简化为:请注意,您不希望使用[i][j]表示法对numpy数组进行索引,而是使用[i,j]。你知道吗
你也许可以使用@eat建议的更高级别的广播来做进一步的改进。你知道吗
编辑: 对上面的代码做了一些更改,试图使索引与OP匹配,并更改了代码中的一个符号错误。你知道吗
简单地说,尝试在更高的抽象级别上进行计算,即尝试避免python级别的循环。你知道吗
仔细学习如何进行元素操作和broadcasting如何操作,最后但同样重要的是不要忘记
linear algebra
的强大功能!你知道吗相关问题 更多 >
编程相关推荐