Как найти индексы определенного значения, существующего в одном месте в двух матрицах? - PullRequest
0 голосов
/ 22 октября 2019

В том, над чем я работаю, у меня есть две пустые матрицы, одинакового размера, заполненные 0 и 1 для простоты (но допустим, что они могут быть заполнены любыми числами). То, что я хотел бы знать, - это способ извлечь из этих двух матриц положение единиц, которые существуют в одной и той же позиции в обеих матрицах.

Например, если у меня есть следующие две матрицы и значение

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

тогда я бы хотел как-то получить информацию обо всех местах, где значение "1" существует в обеих матрицах, то есть:

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

Я предполагаю результатможно рассматривать как пересечение, но в моем случае важна позиция, поэтому я не думаю, что np.intersect1d () очень поможет. В реальных матрицах, с которыми я работаю, они порядка 10 000 на 10 000, поэтому этот список, вероятно, будет намного длиннее.

Заранее благодарен за любую помощь!

1 Ответ

3 голосов
/ 22 октября 2019

Вы можете использовать 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)

Выход

[[0 5]
 [1 1]
 [2 3]
 [2 5]
 [4 2]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...