You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在Python中实现PAA(分段聚合近似)算法进行时间序列降维

Python实现分段聚合近似(PAA)算法

核心原理

PAA的本质是时间序列的分段均值压缩:将长度为N的原始序列划分为M个连续分段,每个分段内所有数据点的平均值作为降维后序列的对应元素,最终得到长度为M的简化序列。若N无法被M整除,前若干个分段会多包含一个数据点,确保所有原始数据都被利用。

代码实现

使用numpy实现高效的PAA转换,同时处理序列长度无法被分段数整除的通用情况:

import numpy as np

def paa_transform(ts, num_segments):
    ts = np.asarray(ts)
    n = len(ts)
    m = num_segments
    
    if m == n:
        return ts.copy()
    if m > n:
        raise ValueError("分段数不能大于原始时间序列的长度")
    
    segment_base_len = n // m
    remainder = n % m
    
    paa_sequence = []
    start_idx = 0
    for i in range(m):
        # 前remainder个分段各多一个数据点
        current_len = segment_base_len + 1 if i < remainder else segment_base_len
        end_idx = start_idx + current_len
        # 计算当前分段的均值
        segment_mean = np.mean(ts[start_idx:end_idx])
        paa_sequence.append(segment_mean)
        start_idx = end_idx
    
    return np.array(paa_sequence)

使用示例

# 生成一个长度为17的随机时间序列
original_ts = np.random.randn(17)
print(f"原始序列长度: {len(original_ts)}")
print(f"原始序列: {original_ts.round(4)}")

# 降维到6个分段
paa_result = paa_transform(original_ts, 6)
print(f"\nPAA降维后序列长度: {len(paa_result)}")
print(f"PAA降维后序列: {paa_result.round(4)}")

说明

  • 输入可以是Python列表或numpy数组,函数内部会统一转换为numpy数组以提升计算效率
  • 当分段数等于原始序列长度时,直接返回原序列的副本
  • 若分段数大于原始序列长度,会抛出参数错误,避免无意义的降维

内容的提问来源于stack exchange,提问作者user22379888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:52:14