Сравнение неравных по размеру матриц Python

Есть два numpy массива заполненных единицами и нулями. Массивы разного размера, нужно как можно быстрее найти процент их совпадения (смещая их друг по другу), (С определением процента совпадения проблем нет, вопрос в том как эффективно организовать перебор). (Думаю, что в numpy и схожих библиотеках, уже есть что-то готовое и быстрое)


Ответы (1 шт):

Автор решения: passant

Если с тем, как сравнивать массивы и как считать процент совпадений и несовпадений вы разобрались, то все, что вам надо - суметь сделать скользящее смещение меньшей матрицы по элементам большей. Для этого специального метода в numpy нет, но делается это просто и стандартно:

import numpy as np
arr_a=np.random.randint(0,2,size=150).reshape(15,-1)
arr_b=np.random.randint(0,2,size=12).reshape(3,-1))
print (arr_a)
print (arr_b)
for i in range(0,arr_a.shape[0]-arr_b.shape[0]+1):
    for j in range (0,arr_a.shape[1]-arr_b.shape[1]+1):
        # Вот тут выполняем сравнение массива 
        # arr_a[i:i+arr_b.shape[0],j:j+arr_b.shape[1]]
        # и массива
        # arr_b
        # например вот так:
        (arr_a[i:i+arr_b.shape[0],j:j+arr_b.shape[1]]==arr_b).all())
        # и подсчет количества ситуаций совпадения и несовпадения
→ Ссылка