给定一个数字,快速检查它在哪个区间?

时间:2015-04-10 10:47:18

标签: matlab

假设我有四个区间:[0,82],[82,146],[146,180],[180,255]。

给出一个数字,让我们说110.我想快速检查哪个间隔是110,返回1或2或3或4。

我想知道MATLAB是否有现有的功能,而不是手动比较数字。

谢谢。

2 个答案:

答案 0 :(得分:6)

你可以使用这样的东西 -

intv = [
    0    82;
    82  146;
    146 180;
    180 255]

num = 110

index = find(num>=intv(:,1) & num<intv(:,2))

如果区间数组是行向量:intv = [0 82 146 180 255],则可以使用 -

index = find(num >= intv(1:end-1) & num < intv(2:end))

或使用histc -

index = find(histc(num,intv))

根据@knedlsepp的建议,对于多个输入数字num,您可以使用 -

[~,indices] = histc(num, intv)

答案 1 :(得分:4)

如果每个间隔在下一个间隔开始时结束(如您的示例所示),并且如果始终确保该数字位于其中一个间隔中,则可以一次确定多个数字的间隔

int_bounds = [82 146 180]; %// omit first (0) and last (255) endpoints
numbers = [100 50 146 250];; %// which interval are those numbers in?
result = sum(bsxfun(@ge, numbers(:).', int_bounds(:)), 1)+1;

在此示例中,结果为

result =
     2     1     3     4