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

Extract elements of matrix from a starting element and size

抱歉标题不好,我很难把这个问题说清楚。基本上我想做的是从二维矩阵中逐行提取元素,从特定列 (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

我认为一定有比这更简洁的方法。

您可以使用 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))).');

这是一种使用 bsxfun's masking capability and thus logical indexing -

的方法
C = (1:size(A,2))';
At = A.';
B = reshape(At(bsxfun(@ge,C,k) & bsxfun(@lt,C,k+N)),N,[]).';