gram_schmidt
gram_schmidt

Reputation: 141

How to find the indices of a certain value that exists in the same location in two matrices?

In what I am working on, I have two numpy matrices, both the same size, filled with 0's and 1's for simplicity (but let's say it could be filled with any numbers). What I would like to know is a way to extract, from these two matrices, the position of the 1's that exist in the same position in both matrices.

For example, if I have the following two matrices and value

a = np.array([[0, 0, 0, 1, 0, 1],
              [1, 1, 0, 1, 1, 1],
              [1, 0, 1, 1, 0, 1],
              [1, 0 ,1, 1, 1, 0],
              [0, 0, 1, 0, 0, 0]])

b = np.array([[0, 0, 0, 0, 0, 1],
              [0, 1, 0, 0, 0, 0],
              [0, 1, 0, 1, 0, 1],
              [0, 0, 0, 0, 0, 1],
              [1, 1, 1, 1, 1, 0]])

value = 1

then I would like a way to somehow get the information of all the locations where the value "1" exists in both matrices, i.e.:

result = [(0,5),(1,1),(2,3),(4,2)]

I guess the result could be thought of as an intersection, but in my case the position is important which is the reason I don't think np.intersect1d() would be much help. In the actual matrices I am working with, they are on the order of about 10,000 by 10,000, so this list would probably be a lot longer.

Thanks in advance for any help!

Upvotes: 0

Views: 120

Answers (1)

Dani Mesejo
Dani Mesejo

Reputation: 61910

You could use numpy.argwhere:

import numpy as np

a = np.array([[0, 0, 0, 1, 0, 1],
              [1, 1, 0, 1, 1, 1],
              [1, 0, 1, 1, 0, 1],
              [1, 0, 1, 1, 1, 0],
              [0, 0, 1, 0, 0, 0]])

b = np.array([[0, 0, 0, 0, 0, 1],
              [0, 1, 0, 0, 0, 0],
              [0, 1, 0, 1, 0, 1],
              [0, 0, 0, 0, 0, 1],
              [1, 1, 1, 1, 1, 0]])

result = np.argwhere(a & b)
print(result)

Output

[[0 5]
 [1 1]
 [2 3]
 [2 5]
 [4 2]]

Upvotes: 3

Related Questions