Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

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.




  • Prev by Date: Clear Citation Style Cache?
  • Next by Date: Re: Find Position of many elements in a large list.
  • Previous by thread: Re: Find Position of many elements in a large list.
  • Next by thread: Re: Find Position of many elements in a large list.