以特定方式重塑MATLAB矩阵

时间:2017-09-14 23:23:03

标签: matlab loops matrix

我正在研究MATLAB代码,以便我基本上可以做到这一点

enter image description here

为了实现这一点,我的代码看起来像这样

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

有人能帮助我以更简单的方式做同样的事情吗?我猜有一个单行命令可以解决这个问题(也许我错了)。

1 个答案:

答案 0 :(得分:2)

在代码中定义Arows。我假设A中的值只是一个例子。如果它们始终为12,......,则可以简化以下某些解决方案。

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');