我有以下电话:
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'>
有什么容易实现的建议可以帮助我加快速度吗?
最佳答案
我看到的最明显的事情是你应该使用 numpy 数组操作。内循环内部进行的计算不依赖于 BB 的值,它只是一个累加器。因此,您可以对 AA
和 detrend
执行逐点乘法,对所有内容求和,然后存储在 BB 中。实际上,您看起来只是在执行两个向量的线性乘积,其中第二个向量始终相同,第一个向量存储在矩阵中。这可以通过以下方式执行:
def compute_using_AA(self):
self.BB.ix = np.dot(self.AA, self.detrend.ix)
这将产生一个与 BB.ix 大小相同的数组,其元素是 AA 中每行与 detrend 的乘积之和。
关于python - 使用 pandas 访问器减少运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32993124/