对于糟糕的标题感到抱歉,我很难说出这个问题。基本上我想做的是逐行从2d矩阵中提取元素,从特定列(k)开始取出多个元素(N)。在for循环中,这看起来像。
A = magic(6);
k = [2,2,3,3,4,4]; % for example
N = 3;
for j = 1:length(A)
B(j,:) = A(j,k(j):k(j)+N-1);
end
我认为必须有比这更简洁的方法。
答案 0 :(得分:3)
您可以使用bsxfun
创建要使用的索引数组。然后将其与行号组合并将其传递给sub2ind
。
inds = sub2ind(size(A), repmat(1:size(A, 1), 3, 1), bsxfun(@plus, k, (0:(N-1))')).';
B = A(inds);
或者没有sub2ind
(但稍微有点神秘)。
B = A(bsxfun(@plus, 1:size(A,1), ((bsxfun(@plus, k, (0:(N-1)).')-1) * size(A,1))).');
答案 1 :(得分:0)
以下是一种使用bsxfun's
屏蔽功能的方法,因而logical indexing
-
C = (1:size(A,2))';
At = A.';
B = reshape(At(bsxfun(@ge,C,k) & bsxfun(@lt,C,k+N)),N,[]).';