Как замаскировать массив столбец за столбцом - PullRequest
1 голос
/ 02 мая 2020

У меня есть массив, подобный следующему

Table = [[True,  False, False, False, False], 
         [False, False, True,  False, False],
         [True,  False, False, True,  False]]

Есть ли способ замаскировать весь столбец за столбцом в MaskTable, конечный результат как

MaskTable = [True, False, True, True, False]

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Попробуйте:

MaskTable = np.any(Table, axis = 0)

Вывод:

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

Используется numpy .any (), который проверяет, имеет ли какое-либо из значений вдоль заданной оси значение True. numpy импортируется здесь как np.

0 голосов
/ 02 мая 2020

Если вы не используете numpy, вы можете отфильтровать столбцы с помощью zip () в пределах понимания списка:

Filtered = [ [v for v,m in zip(row, MaskTable) if m] for row in Table ]

Если вы используете numpy, ваша таблица и маска должны быть numpy возражений:

import numpy as np

Table = np.array([[True,  False, False, False, False], 
         [False, False, True,  False, False],
         [True,  False, False, True,  False]])
MaskTable = np.array([True, False, True, True, False])

Filtered = Table[:,MaskTable]

Выше приведен ответ на ваш вопрос, сформулированный в заголовке.

Тем не менее, ваш пример вывода показывает, что вы на самом деле пытаетесь сделать это примените отношение ИЛИ по столбцам в вашей матрице:

MaskTable = np.any(Table,axis=0)

или

MakTable  = np.logical_or.reduce(Table,axis=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...