如何高效计算向量序列的自相关型加权和(无显式循环)

本文介绍一种基于 NumPy 矩阵运算的向量化方法,用于高效计算给定二维数组各行与全数组点积之和,并按位移步长 $ t $ 进行归一化,避免 Python 显式循环,显著提升性能。

本文介绍一种基于 NumPy 矩阵运算的向量化方法,用于高效计算给定二维数组各行与全数组点积之和,并按位移步长 $ t $ 进行归一化,避免 Python 显式循环,显著提升性能。

在时间序列分析、信号处理或统计建模中,常需对数据矩阵按“滞后”(lag)维度执行类似自相关结构的聚合计算:对每个起始行索引 $ t $,取第 $ t $ 行作为权重向量,与整个数据矩阵做逐行点积,再对所有点积结果求和,并除以有效样本数 $ n - t $。若用传统 for 循环实现,不仅代码冗长,且在大数据量下效率低下。

幸运的是,该操作可完全向量化。核心洞察在于:

以下是简洁、高效的实现:

import numpy as np

my_data = np.array([
    [1, 1, 1],
    [2, 2, 2],
    [3, 3, 3],
    [4, 4, 4],
    [5, 5, 5]
])
n = len(my_data)

# 向量化计算:t ∈ [0, 1, ..., n-1]
t_values = np.arange(n)
gram_matrix = my_data @ my_data.T      # shape: (n, n)
result = gram_matrix.sum(axis=0) / (n - t_values)

print(result)
# 输出: [  9.   22.5  45.   90.  225. ]

关键优势

⚠️ 注意事项

综上,该向量化方案是兼顾简洁性、性能与可维护性的最佳实践,适用于大多数中等规模科学计算场景。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。