[Numpy-discussion] How to find indices of values in an array (indirect in1d) ?

Nicolas P. Rougier Nicolas.Rougier at inria.fr
Wed Dec 30 14:21:48 EST 2015


In the end, I’ve only the list comprehension to work as expected

A = [0,0,1,3]
B = np.arange(8)
np.random.shuffle(B)
I = [list(B).index(item) for item in A if item in B]


But Mark's and Sebastian's methods do not seem to work...



> On 30 Dec 2015, at 19:51, Nicolas P. Rougier <Nicolas.Rougier at inria.fr> wrote:
> 
> 
> Unfortunately, this does not handle repeated entries in a.
> 
>> On 30 Dec 2015, at 19:40, Mark Miller <markperrymiller at gmail.com> wrote:
>> 
>> I was not familiar with the .in1d function. That's pretty handy.
>> 
>> Yes...it looks like numpy.where(numpy.in1d(b, a)) does what you need.
>> 
>>>>> numpy.where(numpy.in1d(b, a))
>> (array([1, 2, 5, 7], dtype=int64),)
>> It would be interesting to see the benchmarks.
>> 
>> 
>> On Wed, Dec 30, 2015 at 10:17 AM, Nicolas P. Rougier <Nicolas.Rougier at inria.fr> wrote:
>> 
>> Yes, it is the expected result. Thanks.
>> Maybe the set(a) & set(b) can be replaced by np.where[np.in1d(a,b)], no ?
>> 
>>> On 30 Dec 2015, at 18:42, Mark Miller <markperrymiller at gmail.com> wrote:
>>> 
>>> I'm not 100% sure that I get the question, but does this help at all?
>>> 
>>>>>> a = numpy.array([3,2,8,7])
>>>>>> b = numpy.array([1,3,2,4,5,7,6,8,9])
>>>>>> c = set(a) & set(b)
>>>>>> c #contains elements of a that are in b (and vice versa)
>>> set([8, 2, 3, 7])
>>>>>> indices = numpy.where([x in c for x in b])[0]
>>>>>> indices #indices of b where the elements of a in b occur
>>> array([1, 2, 5, 7], dtype=int64)
>>> 
>>> -Mark
>>> 
>>> 
>>> On Wed, Dec 30, 2015 at 6:45 AM, Nicolas P. Rougier <Nicolas.Rougier at inria.fr> wrote:
>>> 
>>> I’m scratching my head around a small problem but I can’t find a vectorized solution.
>>> I have 2 arrays A and B and I would like to get the indices (relative to B) of elements of A that are in B:
>>> 
>>>>>> A = np.array([2,0,1,4])
>>>>>> B = np.array([1,2,0])
>>>>>> print (some_function(A,B))
>>> [1,2,0]
>>> 
>>> # A[0] == 2 is in B and 2 == B[1] -> 1
>>> # A[1] == 0 is in B and 0 == B[2] -> 2
>>> # A[2] == 1 is in B and 1 == B[0] -> 0
>>> 
>>> Any idea ? I tried numpy.in1d with no luck.
>>> 
>>> 
>>> Nicolas
>>> 
>>> _______________________________________________
>>> NumPy-Discussion mailing list
>>> NumPy-Discussion at scipy.org
>>> https://mail.scipy.org/mailman/listinfo/numpy-discussion
>>> 
>>> _______________________________________________
>>> NumPy-Discussion mailing list
>>> NumPy-Discussion at scipy.org
>>> https://mail.scipy.org/mailman/listinfo/numpy-discussion
>> 
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at scipy.org
>> https://mail.scipy.org/mailman/listinfo/numpy-discussion
>> 
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at scipy.org
>> https://mail.scipy.org/mailman/listinfo/numpy-discussion
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> https://mail.scipy.org/mailman/listinfo/numpy-discussion




More information about the NumPy-Discussion mailing list