Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

np.searchSorted over 2D array

181 views
Skip to first unread message

Heli

unread,
Dec 9, 2015, 11:07:41 AM12/9/15
to
Dear all,

I need to check whether two 2d numpy arrays have intersections and if so I will need to have the cell indices of the intersection.

By intersection, I exactly mean the intersection definition used in set theory.

I will give an example of what I need to do:

a=[[0,1,2],[3,4,5],[6,7,8]]
b=[[0,1,2],[3,4,5]]

I would like to check whether b is subset of a and then get the indices in a where b matches.

cellindices=[[True,True,True],[True,True,True],[False,False,False]]

What is the best way to do this in numpy?


Thanks in Advance for your help,

Peter Otten

unread,
Dec 9, 2015, 11:37:07 AM12/9/15
to
Heli wrote:

[Please don't open a new thread for the same problem]
Providing an example is an improvement over your previous post, but to me
it's still not clear what you want.

>>> functools.reduce(lambda x, y: x | y, (a == i for i in b.flatten()))
array([[ True, True, True],
[ True, True, True],
[False, False, False]], dtype=bool)

produces the desired result for the example input, but how do you want to
handle repeating numbers as in

>>> a = numpy.array([[0,1,2],[3,4,5],[3, 2, 1]])
>>> functools.reduce(lambda x, y: x | y, (a == i for i in b.flatten()))
array([[ True, True, True],
[ True, True, True],
[ True, True, True]], dtype=bool)

?

Try to be clear about your requirement, describe it in english and provide a
bit of context. You might even write a solution that doesn't use numpy and
ask for help in translating it.

At the very least we need more/better examples.

Heli

unread,
Dec 10, 2015, 9:41:40 AM12/10/15
to
Thanks Peter,

I will try to explain what I really need.

I have a 3D numpy array of 100*100*100 (1M elements). Then I have another numpy array of for example 10*2*10 (200 elements). I want to know if in the bigger dataset of 100*100*100, there is anywhere, where the second numpy array of 200 elements with shape 10*2*10 appears. If it does, then I want the indices of the bigger dataset where this happens.

I hope I´m making myself more clear :)
Thanks for your comments,

Oscar Benjamin

unread,
Dec 10, 2015, 2:56:04 PM12/10/15
to
On 10 Dec 2015 14:46, "Heli" <hem...@gmail.com> wrote:
>
> Thanks Peter,
>
> I will try to explain what I really need.
>
> I have a 3D numpy array of 100*100*100 (1M elements). Then I have another
numpy array of for example 10*2*10 (200 elements). I want to know if in the
bigger dataset of 100*100*100, there is anywhere, where the second numpy
array of 200 elements with shape 10*2*10 appears. If it does, then I want
the indices of the bigger dataset where this happens.
>

So you want to find N in M. First find all occurrences of N[0][0][0] in
M[:90][:98][:90]. Then for each of those extract the same size subview from
M and check if (Ms == N).all().

--
Oscar
0 new messages