【发布时间】:2019-10-22 11:03:27
【问题描述】:
我正在尝试找到一种有效的方法来提取矩阵中的 n 个连续列组。示例:
A = [0, 1, 2, 3, 4; 0, 1, 2, 3, 4; 0, 1, 2, 3, 4];
n = 3;
应该产生类似这样的输出:
answer = cat(3, ...
[0, 1, 2; 0, 1, 2; 0, 1, 2], ...
[1, 2, 3; 1, 2, 3; 1, 2, 3], ...
[2, 3, 4; 2, 3, 4; 2, 3, 4]);
我知道这可以使用for 循环,例如下面的代码sn-p:
answer = zeros([3, 3, 3]);
for i=1:3
answer(:, :, i) = A(:, i:i+2);
endfor
但是,在这种情况下,我试图避免使用 for 循环 - 是否也有可能将此操作向量化(使用索引表达式)?
【问题讨论】:
-
使用
blockproc你可以这样做:answer = reshape(blockproc(A,[n,1],[0,1],@(x) x),n,n,[])(:,:,2:end-1)
标签: matlab matrix vector vectorization octave