Создайте логическую маску из пересечения 2 массивов

#python #arrays #matrix

#python #массивы #матрица

Вопрос:

Учитывая 2 массива (действительно, матрицы) одинаковой формы, каков наилучший способ извлечь логическую маску из их пересечения? То есть True, если элементы в каждой позиции матрицы равны, False, если сравнение элементов завершается неудачей.

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

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

Элементы являются нечисловыми (строками).

Комментарии:

1. Когда вы говорите «массив», вы действительно имеете в виду вложенные списки? Или вы используете что-то вроде NumPy?

Ответ №1:

Если ваши два массива (назовем их A и B) являются массивами numpy, вы могли бы просто сделать:

 Mask = A==B
print("Mask = ",Mask)
 

Комментарии:

1. Это выглядит многообещающе; с нетерпением жду возможности попробовать.

Ответ №2:

Используйте numpy, где

https://numpy.org/doc/stable/reference/generated/numpy.where.html

 image = np.where(matrix2, WhiteImage, matrix1).astype(np.uint8)
 

Вам нужно создать 3-ю матрицу с одинаковой формой, сделать ее похожей

 WhiteImage = np.zeros((height,width,X), np.uint8)
 

Если ваши массивы не являются numpys, просто преобразуйте их с помощью

 matrix1 = np.array(matrix)
 

Комментарии:

1. Кажется более подробным, чем другой предложенный ответ, но попробую и этот.