Найти, где небольшая 2d матрица существует в большей 2d матрице - PullRequest
2 голосов
/ 24 апреля 2020

Допустим, у меня есть следующая матрица 6x6 a и матрица 2x2 b:

a = np.array([[1, 1, 1, 0, 0, 0],
              [1, 0, 1, 0, 1, 0],
              [1, 0, 0, 0, 0, 1],
              [1, 1, 1, 1, 1, 0],
              [0, 0, 0, 0, 0, 0],
              [1, 0, 0, 1, 1, 1]])

b = np.array([[0, 1],
              [0, 0]])

Я хочу создать таблицу истинности, в которой 2d матрица меньшего массива существует внутри большей, но выбирая только верхний левый индекс

Ожидаемый результат:

>>> array([[False, False, False, False, False, False],
           [False, True,  False, True,  False, False],
           [False, False, False, False, False, False],
           [False, False, False, False, False, False],
           [False, False, False, False, False, False],
           [False, False, False, False, False, False]])

Полагаю, я мог бы построить массивную l oop и оценить с помощью np.roll (), но я надеюсь, что есть элегантное решение вместо этого?

1 Ответ

5 голосов
/ 24 апреля 2020

Вы можете использовать np.lib.stride_tricks.as_strided для создания версии a с двумя дополнительными измерениями, которые служат для сравнения. Затем вы можете использовать .all(axis=(-2, -1)), чтобы проверить равенство:

In [3]: a2 = np.lib.stride_tricks.as_strided(a, shape=a.shape + b.shape, strides=2*a.strides)
In [4]: a2 = a2[:-b.shape[0]+1, :-b.shape[1]+1]
In [5]: (a2 == b).all(axis=(-2, -1))                                                          
Out[5]: 
array([[False, False, False, False, False],
       [False,  True, False,  True, False],
       [False, False, False, False, False],
       [False, False, False, False, False],
       [False, False, False, False, False]])

Если вы хотите дополнительное заполнение, вы можете использовать np.pad заранее:

a = np.pad(a, ((0, 1), (0, 1)), mode='wrap')

Затем действуйте, как указано выше, с as_strided.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...