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

Octave实现相邻值平均序列平滑(非经典移动平均)方法咨询

问题解答

计算类型判定

  • 该计算同时属于2点无加权简单移动平均和基础平滑函数范畴:移动平均是最常用的时序平滑实现手段之一,你提出的计算逻辑是窗口长度为2的移动平均的标准实现,本身就属于平滑处理的子类。

Octave 实现思路

1. 针对2点平均的最简向量化实现

不需要依赖任何额外包,直接用索引操作即可,性能最高:

% 输入v为列向量
o = (v(1:end-1) + v(2:end)) ./ 2;

带入你给出的示例v = [1;3;5;3;9;9]计算,输出结果正好为[2;4;4;6;9],完全匹配需求。

2. 通用移动平均实现(适配任意窗口长度)

如果后续需要扩展为更长窗口的平滑计算,可以直接用Octave内置的conv卷积函数实现:

% 2点移动平均实现,和需求结果一致
o = conv(v, [0.5, 0.5], 'valid');

其中'valid'参数指定返回无边缘填充的计算结果,仅保留窗口完全覆盖输入向量的计算值。如果需要修改为N点平均,只需要把卷积核改为对应长度的等权重向量即可,比如3点平均的卷积核为ones(1,3)/3。

3. 类Matlab smooth函数封装

你可以直接封装一个通用平滑函数满足日常使用,示例如下:

function o = simple_smooth(v, window_len)
    % 简单移动平均实现,适配列向量输入
    % 输入参数:
    %   v: 输入待平滑向量
    %   window_len: 移动窗口长度,默认值为2
    % 输出参数:
    %   o: 平滑后向量,长度为 length(v) - window_len + 1
    if nargin < 2
        window_len = 2;
    end
    kernel = ones(window_len, 1) / window_len;
    o = conv(v, kernel, 'valid');
end

调用示例:

v = [1;3;5;3;9;9];
% 调用默认2点平滑,输出为[2;4;4;6;9]
res = simple_smooth(v);
% 调用3点平滑,输出为[3; 11/3; 17/3; 7]
res_3win = simple_smooth(v, 3);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:09:04