[Numpy-discussion] numpy where function on different sized arrays
Sat Nov 24 16:23:36 CST 2012
A pure Python approach could be:
for i, x in enumerate(a):
for j, y in enumerate(x):
if y in b:
Of course, it is slow if the arrays are large, but it is very
readable, and probably very fast if cythonised.
On Sat, Nov 24, 2012 at 10:19 PM, David Warde-Farley
> 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
> 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 <firstname.lastname@example.org>
>> 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).
>> The University of Edinburgh is a charitable body, registered in
>> Scotland, with registration number SC005336.
>> NumPy-Discussion mailing list
> NumPy-Discussion mailing list
More information about the NumPy-Discussion