使用bsxfun的冒号模拟功能,利用两个bsxfun(@le和bsxfun(@ge – )
N = size(A,1)
[R,~] = find((bsxfun(@le,B(:,1),1:N) & bsxfun(@ge,B(:,2),1:N)).')
out = A(R,:)
样品运行#1 –
>> A
A =
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
>> B
B =
1 2
4 6
>> out
out =
1 2 3
4 5 6
10 11 12
13 14 15
16 17 18
示例运行#2(展示如何处理重叠) –
>> A
A =
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
>> B
B =
1 2
4 6
3 5
>> out
out =
1 2 3
4 5 6
10 11 12
13 14 15
16 17 18
7 8 9
10 11 12
13 14 15
不是矢量化解决方案,但更多内存有效的解决方案可能与colon operator –
idx = arrayfun(@colon, B(:,1), B(:,2), 'Uni', 0)
out = A([idx{:}],:)