On Fri, Sep 11, 2009 at 15:46, Andrew Jaffe<a.h.ja...@gmail.com> wrote: > On 11/09/2009 08:33, Robert Kern wrote: >> On Fri, Sep 11, 2009 at 10:24, Andrew Jaffe<a.h.ja...@gmail.com> wrote: >>> Dear all, >>> >>> I've got two (integer) arrays, and I want to find the indices in the >>> first one that have entries in the second. I.E. I want all idx s.t. >>> there exists a j with a[idx]=b[j]. Here is my current implementation >>> (with a = pixnums, b=surveypix) >> >> numpy.setmember1d() [or numpy.in1d() for the SVN trunk of numpy]. >> > Robert, > > Thanks. But in fact this fails for my (possibly corner or edge) case: > when the first array has duplicates that, in fact, are not in the second > array, indices corresponding to those entries get returned. In general, > duplicates are not necessarily treated right by this algorithm, I don't > think. > > I can understand that this may be a feature, not a bug, but in fact for > my use-case I want the algorithm to return the indices corresponding to > all entries in ar1 with the same value, if that value appears anywhere > in ar2.
That is the main feature that in1d() added over setmember1d(). If you cannot use the SVN trunk of numpy, you can just copy the implementation. It is not large. In [4]: a = np.arange(5) In [5]: b = np.hstack([a,a]) In [6]: c = np.arange(0, 10, 2) In [7]: c Out[7]: array([0, 2, 4, 6, 8]) In [8]: np.in1d(b, c) Out[8]: array([ True, False, True, False, True, True, False, True, False, True], dtype=bool) -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion