Matlab:从索引矩阵中选择子阵列

时间:2015-01-14 10:07:08

标签: arrays matlab indexing

我有一个逻辑数组B和一个大小为A x n的矩阵2,其中包含n对开始/停止索引

A= [start1, stop1; start2, stop2; start3, stop3];

如何根据数组B中包含的开始/停止对选择数组A的子数组?

我是这样做的:

for i=1:1:size(A,1)     
    B(A(i,1):A(i,2)) = true;    
end

有没有办法以更优雅的方式使用for循环(甚至方便地重新排列数组A)?

2 个答案:

答案 0 :(得分:4)

你可以

n = numel(B);
iA = zeros( 1, n+1 ); %// +1 for boundary case
iA( A(:,1) ) = 1;
iA( A(:,2)+1 ) = -1;
iA(end) = []; %// discard boundary entry
B( cumsum(iA) > 0 ) = true;

做出的假设

  1. A(:,1)始终为> = 1
  2. A(:,2)始终为< = nB中的元素数量)
  3. A中定义的部分不重叠

答案 1 :(得分:2)

如果确保每个止损小于下一次开始(指数范围不重叠),则另一种方法是

B(mod(sum(bsxfun(@le, 1:numel(B), [A(:,1)-1; A(:,2)])),2)>0) = true;