Numpy, строки фильтра используют маску из 1,0 значений? - PullRequest
2 голосов
/ 05 ноября 2019

Opencv иногда возвращает маску для фильтрации.

Дает массив A=[[1,2],[3,4],[5,6]]

и маску mask=[1,0,1]

Как применить маску для получения [[1,2],[5,6]]?

Я пытался A[mask==1], но там указано, что размерность не совпадает.

np.where и np.nonzero, похоже, тоже не работают.

Редактировать:

Оказывается A[mask==1] работает,
В реальном случае я сталкивался с тем, что mask.shape - это (n,1), но не (n,)
, что дополнительное 1 вызвало проблему.
np.squeeze решил проблему

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Оба

mask = mask.nonzero()
res = A[mask]

и

mask = mask.astype(bool)
res = A[mask]

должны работать!

1 голос
/ 05 ноября 2019

Как это?

A = np.array([[1,2],[3,4],[5,6]])
mask = np.array[1,0,1])
>>> A[np.where(mask==1),:]
array([[[1, 2],
        [5, 6]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...