Как устранить дополнительные измерения в сопоставлении с образцом 3D-массива Numpy?Python

Программы на Python
Ответить
Anonymous
 Как устранить дополнительные измерения в сопоставлении с образцом 3D-массива Numpy?

Сообщение Anonymous »

Этот скрипт Python:

Код: Выделить всё

import numpy as np

img = np.zeros((5, 5, 3), dtype='u1')
a = (1, 2, 3)
b = (3, 2, 1)
img[1:4, 1:4] = a
img[1, 1] = b
pat = img[1:4, 1:4]
win = np.lib.stride_tricks.sliding_window_view(img, window_shape=(3, 3, 3))
matches = np.all(win == pat, axis=(0, 1))
print(matches)
производит:

Код: Выделить всё

[[[[False False False]
[False False False]
[False False False]]

[[False False False]
[False  True False]
[False False False]]

[[False False False]
[False False False]
[False False False]]]]
который имеет избыточные размеры. Верхний левый угол шаблона pat расположен в координатах (1, 1) изображения img. Есть ли способ получить совпадения, равные:

Код: Выделить всё

  [[False False False]
[False  True False]
[False False False]]
чтобы получить координаты шаблона более напрямую?

Сопоставление pat с img имеет смысл только в 2D, то есть при тестировании:

Код: Выделить всё

img[0:3, 0:3] == pat
img[0:3, 1:4] == pat
img[0:3, 2:5] == pat
img[1:4, 0:3] == pat
...
Нам нужно всего 3 x 3 спички pat. Вместо этого я получаю win с формой (3, 3, 1, 3, 3, 3), которая достаточно близка, но совпадение с формой (3, 3, 1, 3) гораздо больше, чем необходимо (3, 3).

Подробнее здесь: https://stackoverflow.com/questions/798 ... n-matching
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»