假设我有四个区间:[0,82],[82,146],[146,180],[180,255]。
给出一个数字,让我们说110.我想快速检查哪个间隔是110,返回1或2或3或4。
我想知道MATLAB是否有现有的功能,而不是手动比较数字。
谢谢。
答案 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