Список:
In [33]: x=[[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0],[1,0,0,0],[0,1,0,0],[0,0,0,1
...: ],[0,0,1,0]]
эквивалент массива:
In [34]: arr = np.array(x)
In [35]: arr
Out[35]:
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0]])
тестирование столбцов:
In [36]: arr[:,[0,2]]
Out[36]:
array([[1, 0],
[0, 0],
[0, 0],
[0, 1],
[1, 0],
[0, 0],
[0, 0],
[0, 1]])
маска, идентифицирующая строки, которые имеют 1 в любом из этих столбцов:
In [37]: arr[:,[0,2]].any(axis=1)
Out[37]: array([ True, False, False, True, True, False, False, True])
применить эту маску для удаления строк; эквивалентно, чтобы сохранить другие строки:
In [38]: arr[~_, :]
Out[38]:
array([[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 1, 0, 0],
[0, 0, 0, 1]])
arr
не изменяется; это новый массив.
Общая идея состоит в том, чтобы создать маску или логический массив, который идентифицирует элементы, которые вы хотите сохранить, и использовать их для создания нового массива.
Использование понимания списка в исходном списке:
In [45]: [row for row in x if not any(row[j] for j in [0,2])]
Out[45]: [[0, 1, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 0, 1]]