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

基于窗口大小与步长的向量重塑技术咨询(附示例)

如何将向量按指定窗口大小和步长重塑为目标矩阵

嘿,这个需求我之前处理过,咱们先把需求明确下来,再一步步实现它~

给定向量 A = [1 2 3 4 5 6 7 8],需要按照 window size=4(窗口大小为4)、step size=2(滑动步长为2)的规则重塑为矩阵,预期结果:

b = [ 1 3 5;
      2 4 6;
      3 5 7;
      4 6 8 ]

先拆解下逻辑:这个需求本质是先从原向量中以步长2滑动截取大小为4的窗口,再把这些窗口作为列组成最终矩阵(或者说把滑动窗口的结果转置)。下面我给你两种常用工具的实现方法:Python(numpy)和Matlab。

Python 实现(基于numpy)

Python里用numpy可以快速搞定,推荐两种方法:

方法1:官方滑动窗口工具(Python 3.10+ 推荐)

numpy从3.10版本开始提供了sliding_window_view函数,专门处理滑动窗口,用法超直观:

import numpy as np

A = np.array([1, 2, 3, 4, 5, 6, 7, 8])
window_size = 4
step_size = 2

# 生成滑动窗口,得到(3,4)的数组(3个窗口,每个窗口4个元素)
windows = np.lib.stride_tricks.sliding_window_view(A, window_size)[::step_size]
# 转置后就是目标矩阵
b = windows.T

print(b)

运行后输出的就是你要的结果:

[[1 3 5]
 [2 4 6]
 [3 5 7]
 [4 6 8]]

方法2:手动构造索引(兼容旧版本)

如果你的numpy版本比较老,不支持sliding_window_view,可以手动构造索引来实现:

import numpy as np

A = np.array([1, 2, 3, 4, 5, 6, 7, 8])
window_size = 4
step_size = 2

# 计算每个窗口的起始索引:0, 2
start_indices = np.arange(0, len(A) - window_size + 1, step_size)
# 构造每个窗口的索引矩阵(4行3列)
indices = start_indices + np.arange(window_size)[:, np.newaxis]
# 通过索引提取元素得到目标矩阵
b = A[indices]

print(b)

Matlab 实现

Matlab里有现成的函数可以用,也可以手动实现:

方法1:用buffer函数(最简便)

Matlab的buffer函数专门用来处理这类分块/滑动窗口的需求,参数设置对了直接出结果:

A = [1 2 3 4 5 6 7 8];
window_size = 4;
step_size = 2;

% buffer函数会直接把每个窗口作为列返回,刚好是我们要的矩阵
b = buffer(A, window_size, window_size - step_size, 'nodelay');

disp(b);

运行后直接输出目标矩阵:

1     3     5
     2     4     6
     3     5     7
     4     6     8

这里window_size - step_size是窗口重叠的长度(4-2=2),'nodelay'表示从第一个元素开始就生成窗口,不做延迟。

方法2:手动构造索引

如果不想用内置函数,手动生成索引也很简单:

A = [1 2 3 4 5 6 7 8];
window_size = 4;
step_size = 2;

% 计算窗口数量
num_windows = floor((length(A) - window_size)/step_size) + 1;
% 构造索引矩阵
indices = repmat((1:window_size)', 1, num_windows) + repmat((0:step_size:(num_windows-1)*step_size), window_size, 1);
% 通过索引提取元素得到目标矩阵
b = A(indices);

disp(b);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:16:42