Matlab中按指定时间索引提取邻域窗口并沿第三维求平均的实现方法
Matlab时间序列窗口均值计算实现
完整实现代码
%% 1. 输入数据(示例) x = [1 2 3 4 5 6 7 8; 9 10 11 12 13 14 15 16; 17 18 19 20 21 22 23 24 ; 25 26 27 28 29 30 31 32]; y = [4 5 6]; %% 2. 配置窗口参数 offset = 1; % 中心索引前后偏移量,若需要前后各2个点修改为2即可 win_len = 2 * offset + 1; [num_chan, ~] = size(x); num_win = length(y); %% 3. 提取所有窗口并堆叠为3D数组 col_idx = y + (-offset:offset); % 生成所有窗口的列索引 win_stack = reshape(x(:, col_idx), num_chan, win_len, num_win); %% 4. 沿第三维(窗口维度)求平均 avg_result = mean(win_stack, 3);
示例运行结果
上述代码运行后avg_result输出为:
4 5 6 12 13 14 20 21 22 28 29 30
注意事项
- 请确保
y中所有索引对应的窗口范围不超出x的列边界:即min(y) > offset且max(y) <= size(x,2) - offset,否则会触发索引越界报错。 - 若需要调整窗口大小,仅需修改
offset参数即可,无需改动其他逻辑。
内容的提问来源于stack exchange,提问作者rth
相关产品推荐
相关产品推荐

