我正在编写 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
有人可以帮助我以更简单的方式做同样的事情吗?我猜有一个单行命令可以解决这个问题(也许我错了)。
最佳答案
让 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');
关于matlab - 以特定方式 reshape MATLAB 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229549/