В этой статье мы узнаем, как найти пересечение между двумя матрицами с помощью NumPy, используя технику вещания.

Введение

Словом пересечение в математике называют подобные (меньшие) объекты между двумя разными объектами. Интуитивно мы можем сказать, что пересечение объектов состоит в том, что оно принадлежит им всем.

С геометрической точки зрения, если у нас есть две различные линии (при условии, что эти линии являются двумя объектами), пересечение этих двух линий будет точкой, в которой встречаются обе линии. Ну, в случае параллельных прямых пересечения не существует. Географически общий перекресток между двумя или более дорогами может быть принят за область или область пересечения.

В теории множеств пересечение двух объектов, таких как A и B, определяется как множество элементов, содержащихся как в A, так и в . Б. Символически мы представляем пересечение как -

Мы также используем приведенный выше символ как И. Программно это становится очень легко закодировать или найти пересечение между двумя множествами.

Используя NumPy, мы можем найти пересечение двух матриц двумя разными способами. На самом деле, есть встроенные методы, с помощью которых мы можем легко найти.

Давайте сначала определим две матрицы одинакового размера

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> 
>>> a = np.random.randint(low=0, high=2, size=(5, 5))
>>> b = np.random.randint(low=0, high=2, size=(5, 5))
>>> 
>>> print(a)
[[1 0 1 1 0]
 [1 0 0 1 0]
 [1 0 1 1 0]
 [1 0 1 0 1]
 [0 1 0 0 0]]
>>> 
>>> print(b)
[[0 0 1 1 0]
 [0 0 0 0 0]
 [1 0 0 1 1]
 [0 0 1 1 0]
 [0 1 0 0 0]]

Использование операции ‘ & ‘

В математике пересечение (&) часто называют 'и'. Когда мы работаем одинаково с a и b, используя технику вещания — автоматически выполняем поэлементный расчет.

>>> c = a & b
>>> print(c)
[[0 0 1 1 0]
 [0 0 0 0 0]
 [1 0 0 1 0]
 [0 0 1 0 0]
 [0 1 0 0 0]]

Результат c представляет собой пересечение матриц a и b. .

Использование метода np.where()

Чтобы понять суть np.where() это специальный метод, который действует как тернарный оператор для массивов NumPy. По умолчанию принимает 3 параметра -

  • условиеУсловие, которое является либо истинным, либо ложным в определенных позициях (логическое значение) массива.
  • x → Значение, которое заменяется в позициях массива, где условие истинно.
  • y → Значение, которое заменяется в позициях массива, где условие ложно.

Давайте создадим функцию для получения пересечения матриц.

def intersect_matrices(mat1, mat2):
    if not (mat1.shape == mat2.shape):
        return False
    
    mat_intersect = np.where((mat1 == mat2), mat1, 0)
    return mat_intersect

Если мы вызовем вышеуказанную функцию с нашими матрицами a и b, мы получим -

>>> c = intersect_matrices(mat1=a, mat2=b)
>>> print(c)
[[0 0 1 1 0]
 [0 0 0 0 0]
 [1 0 0 1 0]
 [0 0 1 0 0]
 [0 1 0 0 0]]

Если мы визуализируем приведенные выше результаты, мы можем получить -

На графике белые пятна представляют истинные значения, а черные пятна представляют ложные значения. В частности, на подграфике c белые пятна представляют значение пересечения наборов a и б.

Примечание. Описанная выше реализация выполняется для матриц в двоичном формате. Когда у нас есть значения, отличные от 0 и 1. Лучше пойти со второй процедурой, где мы заменяем значения на 0 в позициях, где условие ложно.

Для других значений, отличных от 0 и 1, у нас есть график, подобный приведенному ниже.

Конец