使用访问器减少运行时间

2024-04-18 18:59:29 发布

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

我有以下电话:

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

有什么建议可以帮助我加快速度吗?你知道吗


Tags: coreselfpandastypeclassaaseriesix
1条回答
网友
1楼 · 发布于 2024-04-18 18:59:29

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

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

这将产生一个与BB.ix公司其元素是detrend在AA中每行的乘积之和。你知道吗

相关问题 更多 >