从起始元素和大小中提取矩阵的元素

时间:2016-05-02 01:59:24

标签: matlab matrix-indexing

对于糟糕的标题感到抱歉,我很难说出这个问题。基本上我想做的是逐行从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

我认为必须有比这更简洁的方法。

2 个答案:

答案 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,[]).';
相关问题