matlab - 以特定方式 reshape MATLAB 矩阵

标签 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

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

最佳答案

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

关于matlab - 以特定方式 reshape MATLAB 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229549/

相关文章:

matlab - 不重置参数的复杂角度计算 : continuous unbounded angle

javascript - 在循环中多次重复数组中的项目?

c++ - 菜单的嵌套循环(基本 C++)

python - 根据行和列对矩阵中的所有元素进行排名

android - 将图片从Android发送到PC上的Matlab

matlab - 如何通过 MATLAB 生成由不同频率滑音段组成的声音?

c - rand() 不返回随机值

c# - 最长公共(public)子序列

MATLAB 在两者之间插入值

javascript - 循环访问通过 URL 链接的 API 结果页面