A pure Python approach could be:

for i, x in enumerate(a):
        for j, y in enumerate(x):
                if y in b:
                        idx.append((i,j))

Of course, it is slow if the arrays are large, but it is very
readable, and probably very fast if cythonised.


David.

On Sat, Nov 24, 2012 at 10:19 PM, David Warde-Farley
<d.warde.far...@gmail.com> wrote:
> M = A[..., np.newaxis] == B
>
> will give you a 40x60x20 boolean 3d-array where M[..., i] gives you a
> boolean mask for all the occurrences of B[i] in A.
>
> If you wanted all the (i, j) pairs for each value in B, you could do
> something like
>
> import numpy as np
> from itertools import izip, groupby
> from operator import itemgetter
>
> id1, id2, id3 = np.where(A[..., np.newaxis] == B)
> order = np.argsort(id3)
> triples_iter = izip(id3[order], id1[order], id2[order])
> grouped = groupby(triples_iter, itemgetter(0))
> d = dict((b_value, [idx[1:] for idx in indices]) for b_value, indices in
> grouped)
>
> Then d[value] is a list of all the (i, j) pairs where A[i, j] == value, and
> the keys of d are every value in B.
>
>
>
> On Sat, Nov 24, 2012 at 3:36 PM, Siegfried Gonzi <sgo...@staffmail.ed.ac.uk>
> wrote:
>>
>> Hi all
>>
>> This must have been answered in the past but my google search capabilities
>> are not the best.
>>
>> Given an array A say of dimension 40x60 and given another array/vector B
>> of dimension 20 (the values in B occur only once).
>>
>> What I would like to do is the following which of course does not work (by
>> the way doesn't work in IDL either):
>>
>> indx=where(A == B)
>>
>> I understand A and B are both of different dimensions. So my question:
>> what would the fastest or proper way to accomplish this (I found a solution
>> but think is rather awkward and not very scipy/numpy-tonic tough).
>>
>> Thanks
>> --
>> The University of Edinburgh is a charitable body, registered in
>> Scotland, with registration number SC005336.
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion@scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to