MathGroup Archive 2012

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

Search the Archive

Re: Find Position of many elements in a large list.


Am 14.08.2012 11:05, schrieb benp84 at gmail.com:
> 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.  Thanks.
>

Hi,

  the fastest way I was able to find is about four times faster than the 
naive approach

Flatten[Position[x, Alternatives @@ Intersection[x, y], 1]]

Dropping successively the irrelevant parts of the huge list x, searching 
becomes faster:

Reap[
  Fold[
   Drop[#1, Sow[LengthWhile[#1, Function[x0, x0 <= #2]]]] &,
   x, Intersection[x, y]
  ]
][[2, 1]] // Accumulate

I tried patterns and compilation; to no avail (see [1]).

Cheers,
  Peter

[1] https://dl.dropbox.com/u/3030567/Mathematica/getpositions.nb




  • Prev by Date: Re: How to draw several contours for one function, while
  • Next by Date: Re: NDSolve curve - obtain single value from curve at t:=d
  • 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.