答案 0 :(得分:4)
只需使用索引然后重塑
mymat = reshape(myvec([1:5 2:6 3:7]),[],3);
进一步自动化
myvec = 99:-1:80; % Some vector
number_of_columns = 4;
window_length = 5;
ind = kron(ones(number_of_columns,1),[1:window_length]') + ...
kron([0:number_of_columns-1]',ones(window_length,1));
Mymat = reshape(myvec(ind),[],number_of_columns);
答案 1 :(得分:1)
天真的实现将使用简单的循环和数组切片,例如:
tab = ['x' 'y' 'z' 'w' 't' 'k' 'l']'
w = 3
n = length(tab)
output = []
for i = 1:n - w +1
output(i,:) = tab(i:i+w-1)'
end
您还可以使用 hankel 矩阵来避免循环。
tab = ['x' 'y' 'z' 'w' 't' 'k' 'l']'
n = length(tab)
w = 3
han = hankel(1:length(tab), 1:3)
output = []
arrayfun(@(x) tab(x),han(1:n-w+1,:))
但是,如果您不是一个非常快速的实现,您可以使用来自图像处理调色板的滑动窗口功能映射,例如 colfilt 。