Получить список из матрицы по маске в Python - PullRequest
0 голосов
/ 04 августа 2020

Какой самый быстрый способ получить список из матрицы, используя другую матрицу в качестве маски в Python?

Порядок списка должен быть по столбцам.

Пример:

matrix = ([1, 2, 3],
          [4, 5, 6],
          [7, 8, 9])

mask1 = ([0, 1, 0],
        [1, 0, 1],
        [0, 0, 0])

mask2 = ([0, 0, 0],
        [1, 1, 1],
        [0, 0, 0])

mask3 = ([0, 0, 1],
        [0, 1, 0],
        [1, 0, 0])

output1 = [4, 2, 6]

output2 = [4, 5, 6]

output3 = [7, 5, 3]

1 Ответ

1 голос
/ 04 августа 2020

Обратите внимание, что ваш matrix/mask выглядит как кортеж, который может быть не идеальным для numpy векторизации. Попробуем преобразовать их в np.array:

matrix = np.array(matrix)

def get_mask(mask, matrix=matrix):
    # .T so we can get the output ordered by colummns
    return matrix.T[np.array(mask, dtype=bool).T]

get_mask(mask1, matrix)

Вывод:

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