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

Python 使用访问器减少运行时间,python,performance,numpy,pandas,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 其中:

我有以下电话:

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
其中:

type(AA)=<type 'numpy.ndarray'>
type(BB) =<class 'pandas.core.series.Series'>
类型(AA)=
类型(BB)=

type(detrend)=


有没有什么简单易行的建议可以帮助我加快速度?

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

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

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

您能否澄清原始数据和预期输出是什么?我已经添加了一个答案,并表达了我的想法,但正如@Leb所说的,用一些数据完成您的文章,可能是一个最小的运行示例
def compute_using_AA(self):
    self.BB.ix = np.dot(self.AA, self.detrend.ix)