Найти матрицу, аналогичную A в большей матрице B - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть 2 матрицы A(n.m) и B(p.q) с p < n и q < m. B состоит из значений, похожих на frame(p.q) внутри A.

Вот что я кодировал:

def find_same(A,B):
    C = np.zeros(np.array(A.shape) - np.array(B.shape))
    dli = len(A[:,0])-len(B[:,0])
    dlj = len(A[0,:])-len(B[0,:])

    for i in range(dli):
        for j in range(dlj):
            tp_diff = A[i:i+len(B[:,0]),j:j+len(B[0,:])]- B
            tp_sum = np.sum(tp_diff**2)
            C[i,j] = tp_sum
    coord = np.unravel_index(C.argmin(), C.shape)
    return coord

У меня есть несколько ужасных циклов, которые делают эту функцию вообще неэффективной с большие матрицы. Я видел некоторые похожие проблемы, решаемые с помощью KDTrees или Cdist, но примененные к вектору. Я не нахожу способ приспособить его к моей проблеме.

Ps: Должен быть способ улучшить и мои дистанционные вычисления, но я сомневаюсь, что это главная проблема эффективности.

Спасибо за вашу помощь!

...