我有以下电话:
def compute_using_AA(self):
k=0
while k<self.nobs:
L = 0
self.BB.ix[k]=0.0
while L<self.nobs:
self.BB.ix[k] = self.BB.ix[k]+self.AA[k,L]*self.detrend.ix[L]
L+=1
k+=1
在剖析中,我看到了:
ncalls tottime percall cumtime percall filename:lineno(function)
8 1.510 0.189 59.611 7.451 Data.py:47(compute_using_AA)
其中:
type(AA)=<type 'numpy.ndarray'>
type(BB) =<class 'pandas.core.series.Series'>
和
type(detrend)=<class 'pandas.core.series.Series'>
是否有任何低悬的水果建议可以帮助我加快速度?
答案 0 :(得分:2)
我看到的最明显的事情是你应该使用numpy数组操作。内循环内部的计算不依赖于BB的值,它只是一个累加器。因此,您可以在AA
和detrend
上执行逐点乘法,将所有内容相加,然后存储在BB中。它实际上看起来像你只是执行两个向量的线性乘积,其中第二个始终是相同的,第一个存储在矩阵中。这可以通过以下方式执行:
def compute_using_AA(self):
self.BB.ix = np.dot(self.AA, self.detrend.ix)
这将产生一个与BB.ix大小相同的数组,其元素是AA中每行的乘积之和。\ / p>