
Re: Find Position of many elements in a large list.
Posted:
Aug 15, 2012 3:39 AM


Am 14.08.2012 11:05, schrieb benp84@gmail.com: > I have a sorted, 1dimensional list X of 1,000,000 integers, and a sorted, 1dimensional 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 builtin 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

