Skip to main content
 首页 » 编程设计

python之在没有 for 循环的情况下对多维数组的时间序列进行去趋势化

2025年05月04日1852php

我有一个 3D 数组,其中包含地球表面每个网格点的海气碳通量时间序列(模型输出)。我想删除时间序列中的趋势(线性)。我遇到了这段代码:

from matplotlib import mlab 
 
for x in xrange(40): 
    for y in xrange(182): 
        cflux_detrended[:, x, y] = mlab.detrend_linear(cflux[:, x, y]) 

我可以通过不使用 for 循环来加快速度吗?

请您参考如下方法:

Scipy 有很多 signal processing工具。 使用 scipy.signal.detrend() 将消除沿数据轴的线性趋势。从文档中可以看出,完整数据集的线性趋势将从每个网格点的时间序列中减去。

import scipy.signal 
cflux_detrended = scipy.signal.detrend(cflux, axis=0) 

使用 scipy.signal 将获得与使用原始帖子中的方法相同的结果。使用 Josef 的 detrend_separate() 函数也将返回相同的结果。