Маска для массива одинаковой формы - PullRequest
0 голосов
/ 07 марта 2020

Array2 [:, 0] содержит индексы строк array1, array2 [:, 1] содержит значение элемента array1. Я хочу получить маску той же формы, что и массив1 в векторизованном виде.

array1=
[[0 1 2]
 [3 4 5]
 [6 7 8]]

array2=
[[0 1]
 [1 3]
 [1 5]
 [2 7]
 [2 9]]

Код:

array1 = np.arange(9).reshape(-1,3)
array2 = np.arange(10).reshape(-1,2)
array2[:,0]=[0,1,1,2,2]

print(array1[array2[:, 0]] == array2[:, 1,None])

Результат, который я получаю:

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

Результат, который я хочу получить:

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

Редактировать: Решение l oop выглядит следующим образом:

mask=np.zeros_like(array1)
for (y,x) in array2:
    mask[y,(np.where(array1[y,:] == x))] = True

1 Ответ

2 голосов
/ 08 марта 2020

Вы можете выполнить отображение обратно:

array1 = np.arange(9).reshape(-1,3)
array2 = np.arange(10).reshape(-1,2)
array2[:,0] = [0,1,1,2,2]

xs, ys = <b>np.where(</b>array1[array2[:, 0]] == array2[:, 1,None]<b>)</b>

mask = np.zeros_like(array1, dtype=bool)
mask[<b>array2[xs,0]</b>, ys] = True

Это дает нам для данных данного примера:

>>> mask
array([[False,  True, False],
       [ True, False,  True],
       [False,  True, False]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...