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

向量化计算不同分割点下从0位起始的子向量方差,替代for循环

无循环实现前缀子数组方差计算

实现原理

根据总体方差的数学定义,可展开为如下形式:

方差 = 元素平方的均值 - 均值的平方

我们可以利用numpy的向量化累加函数np.cumsum一次性计算所有前缀的元素和、元素平方和,再通过向量运算直接得到所有前缀的方差,全程无显式for循环,运算效率远高于循环实现,尤其适合长数组场景。

实现代码

import numpy as np

# 原示例测试数据
np.random.seed(1)
arr = np.random.normal(size=100)

# 无逻辑计算核心代码
n_arr = np.arange(1, arr.size + 1)
cumsum = np.cumsum(arr)
cumsum_sq = np.cumsum(arr ** 2)
res = cumsum_sq / n_arr - (cumsum / n_arr) ** 2

结果一致性验证

你可以和原for循环的输出对比,二者在浮点误差范围内完全相等:

# 原for循环实现
res_loop = []
for i in range(1, arr.size+1):
    subvector = arr[:i]
    var = np.var(subvector)
    res_loop.append(var)

# 验证相等
print(np.allclose(res, res_loop)) # 输出 True

扩展说明

如果你需要计算样本方差(即方差计算时分母为n-1而非n),只需要调整运算逻辑即可:

# 样本方差版本实现
res_sample = (cumsum_sq - cumsum**2 / n_arr) / (n_arr - 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:54:03