Re: checking for overlap
- To: mathgroup at smc.vnet.net
- Subject: [mg20111] Re: [mg20065] checking for overlap
- From: BobHanlon at aol.com
- Date: Thu, 30 Sep 1999 02:43:17 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Dennis, Here is one way: findInterval1[tvals_List, ints_List] := Select[Flatten[Outer[List, tvals, ints, 1, 1], 1], #[[2, 1]] <= #[[1]] < #[[2, 2]] &] Note that the proper test criteria depends on whether the intervals are closed or open (on right or left or both). tvals = Sort[Table[12*Random[], {10}]] {0.66776, 1.53389, 1.85253, 2.07472, 2.58448, 5.6082, 7.28918, 7.53907, \ 10.3284, 11.4026} If the intervals do not overlap then a tval can be in only one interval ints = {{1, 3}, {3, 4}, {4, 8}, {8, 10}}; findInterval1[tvals, ints] {{1.53389, {1, 3}}, {1.85253, {1, 3}}, {2.07472, {1, 3}}, {2.58448, {1, 3}}, {5.6082, {4, 8}}, {7.28918, {4, 8}}, {7.53907, {4, 8}}} Transpose[%][[1]] {1.53389, 1.85253, 2.07472, 2.58448, 5.6082, 7.28918, 7.53907} If the intervals do overlap, then a tval can be in more than one interval ints = {{1, 3}, {2, 4}, {3, 8}, {7, 10}}; findInterval1[tvals, ints] {{1.53389, {1, 3}}, {1.85253, {1, 3}}, {2.07472, {1, 3}}, {2.07472, {2, 4}}, {2.58448, {1, 3}}, {2.58448, {2, 4}}, {5.6082, {3, 8}}, {7.28918, {3, 8}}, {7.28918, {7, 10}}, {7.53907, {3, 8}}, {7.53907, {7, 10}}} Union[Transpose[%][[1]]] {1.53389, 1.85253, 2.07472, 2.58448, 5.6082, 7.28918, 7.53907} Bob Hanlon In a message dated 9/29/1999 8:45:44 AM, dennisw555 at aol.com writes: >I am looking for an elegant way of checking for overlap. > >Suppose I have a set of time intervals given by >ints = {{t1,t2},{t3,t4},{t5,t6}. ...} and another set of times >tvals = {u1,u2,u3, ...}. > What is a fast, elegant way of checking which of the tvals is within any >of >the ints time intervals? >