Re: Find Position of many elements in a large list.
- To: mathgroup at smc.vnet.net
- Subject: [mg127694] Re: Find Position of many elements in a large list.
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Wed, 15 Aug 2012 03:35:26 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
On 8/14/12 at 4:22 AM, benp84 at gmail.com wrote: >I have a sorted, 1-dimensional list X of 1,000,000 integers, and a >sorted, 1-dimensional list Y of 10,000 integers. Most, but not all, >of the elements of Y are also elements of X. I'd like to know the >positions of the elements in X that are also in Y. What's the >fastest way to compute this? >I have an algorithm in mind but it requires lots of custom code and >I'm wondering if there's a clever way to do it with built-in >functions. Here is potentially a fast way. In[14]:= x = Range[100]; y = Sort@RandomInteger[1000, 20]; First[y] Out[16]= 47 I executed this a couple of time to ensure at least one value in common In[17]:= common = Intersection[x, y]; Ordering[Ordering[Join[common, x]]][[;; Length@common]] - Range[0, Length@common - 1] Out18= {47,48,49} and to show this is right the common elements are: In[19]:= common Out[19]= {47,48,49} Ordering is a fairly fast Mathematica function. So, I think this will be reasonably fast.