【问题标题】:Reshaping MATLAB matrix in a particular way以特定方式重塑 MATLAB 矩阵
【发布时间】:2026-01-23 13:30:01
【问题描述】:

我正在编写一个 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

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

【问题讨论】:

  • 你有图片处理工具箱吗?
  • 嗨 Luis,我愿意,但我必须说我不想使用任何工具箱。

标签: matlab loops matrix


【解决方案1】:

Arows 在您的代码中定义。我假设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');
    

【讨论】:

  • “滑动”是否与滑动窗口有关?如果是这样,那真的会帮助我处理代码的其他部分。
  • @bru1987 Yes,是
  • 很高兴我能帮上忙。你也一样!
  • 我的 Python 不是很流利,但 here 是我的尝试
  • 谢谢@Luis,它就像一个魅力。祝你有美好的一天!
最近更新 更多