python - 使用 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

在分析中我看到:

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 的值,它只是一个累加器。因此,您可以对 AAdetrend 执行逐点乘法,对所有内容求和,然后存储在 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/

相关文章:

Pandas 动态 Groupby 和 Shift

python - 替换numpy中的子数组

python - numpy:用于数组划分的简明条件语法

python - 应用于 pandas 数据框中的两列时出现 Difflib 错误

python 字符串替换,所有可能的组合 #2

python - 如何使用python删除文件夹内的所有文件夹?

performance - 预缓存和预取之间有区别吗?

performance - 为什么我在使用范围时看到某些尺寸的 map 速度变慢?

c++ - 为什么编译器内联产生的代码比手动内联慢?

python - 尝试在我的 Tkinter/Python 应用程序中嵌入 native WINDOWS 命令​​行