Re: More Efficient Method

• To: mathgroup at smc.vnet.net
• Subject: [mg105117] Re: More Efficient Method
• From: Raffy <raffy at mac.com>
• Date: Sat, 21 Nov 2009 03:35:40 -0500 (EST)
• References: <he5v47\$3am\$1@smc.vnet.net>

```On Nov 20, 3:38 am, blamm64 <blam... at charter.net> wrote:
> I have a couple of functions designed to poke a single hole, and to
> poke multiple holes, in a one-level list:
>
> We define a function which, given the imported pressure data, finds
> the subset of that pressure data excluding the pressure data points
> between "targetL " and "targetU".
>
> In[5]:= findsubset[data_?VectorQ,targetL_?NumericQ,targetU_?
> NumericQ] := Select[data,(#<=targetL || #>=targetU &)]
>
> This function will pluck out multiple holes in the data list.
>
> In[6]:= subsets[data_?VectorQ,tarList_?ListQ]:=Module[{tmp,tmp1},
> tmp=data;
> Do[tmp1=findsubset[tmp,tarList[[i,1]],tarList[[i,2]]];tmp=tmp1,
> {i,Dimensions[tarList][[1]]}];
> tmp
> ]
>
> The following works fine (big holes chosen not to give large result):
>
> In[7]:= datalist=Range[11,3411,10];
>
> In[12]:= targetlist={{40, 1500},{1600,3300}};
>
> In[13]:= resultdata=subsets[datalist,targetlist]
>
> Out[13]=
> {11,21,31,1501,1511,1521,1531,1541,1551,1561,1571,1581,1591,3301,3311,332=
1, 3331,3341,3351,3361,3371,3381,3391,3401,3411}
>
> But if "datalist" happens to be very large, surely there is a (much)
> more efficient method?
>
> I tried unsuccessfully to use pure functions with Select, but have a
> somewhat nebulous feeling there's a pure function way of doing this
> effectively much more efficiently.
>
> I know, I know: the above have no consistency checking.  I also know
> "subsets" could be used in place of "findsubset" just by replacing the
> call of "findsubset" with the code of "findsubset" in "subsets".
>
> >From what I've seen on this forum there are some really experienced
>
> people who might provide an efficient way of implementing the above.
>
> -Brian L.

I didn't do any speed testing yet, but this functionality is available
through Interval.

With[{interval = Interval[{40, 1500}, {1600, 3300}]},
Select[Range[11, 123123, 10], ! IntervalMemberQ[interval, #] &]
]

```

• Prev by Date: Re: Undo in Mathematica
• Next by Date: Re: More Efficient Method
• Previous by thread: Re: More Efficient Method
• Next by thread: Re: More Efficient Method