使用pandas访问器减少运行时间

时间:2015-10-07 13:10:44

标签: python performance numpy pandas

我有以下电话:

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'>

是否有任何低悬的水果建议可以帮助我加快速度?

1 个答案:

答案 0 :(得分:2)

我看到的最明显的事情是你应该使用numpy数组操作。内循环内部的计算不依赖于BB的值,它只是一个累加器。因此,您可以在AAdetrend上执行逐点乘法,将所有内容相加,然后存储在BB中。它实际上看起来像你只是执行两个向量的线性乘积,其中第二个始终是相同的,第一个存储在矩阵中。这可以通过以下方式执行:

def compute_using_AA(self):
    self.BB.ix = np.dot(self.AA, self.detrend.ix)

这将产生一个与BB.ix大小相同的数组,其元素是AA中每行的乘积之和。\ / p>