我正在研究MATLAB代码,以便我基本上可以做到这一点
为了实现这一点,我的代码看起来像这样
A = [1:30]'; % Example matrix
rows = 3;
for i=1:(numel(A)-rows+1)
B(1:rows,i)=A(i:i+rows-1,1);
end
有人能帮助我以更简单的方式做同样的事情吗?我猜有一个单行命令可以解决这个问题(也许我错了)。
答案 0 :(得分:2)
在代码中定义A
和rows
。我假设A
中的值只是一个例子。如果它们始终为1
,2
,......,则可以简化以下某些解决方案。
A = [1:30].';
rows = 3;
以下是一些方法:
我的选择:
B = A(bsxfun(@plus, (1:rows).', 0:numel(A)-rows));
替代方案:
B = conv2(A.', flip(eye(rows)));
B = B(:, rows:end-rows+1);
效率稍差:
B = hankel(A);
B = B(1:rows, 1:numel(A)-rows+1);
如果您有图像处理工具箱:
B = im2col(A, [rows 1], 'sliding');