np.where несколько условий на несколько столбцов - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть 2D-массив и рабочий код с условием np.where () для одного столбца. Мне нужно улучшить этот код, добавив еще одно условие, добавив дополнительный фильтр.

для массива, подобного этому:

array([[  1,   2,   3],
       [ 11,  22,  33],
       [101, 202, 303],
       [100, 200, 303],
       [111, 222, 333]])

мое условие работает нормально, если значение столбца индекса 2 равно 303

a = np.delete(a, np.where(a[:, 2] == 303), axis=0)

Теперь мне нужно добавить еще одно условие, где значение индекса 1 равно 200. Я попытался добавить np.all для нескольких условий, как указано ниже, но это не решает задачу.

a = np.delete(a, np.where(np.all((a[:, 2] == 303) & (a[:,1] == 200)) ), axis=0)

любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Использование логического_и явно, затем возврат к «не» - еще одна возможность.

w = np.logical_and(a[:, 2] == 303, a[:, 1] == 200)

a[~w]

array([[  1,   2,   3],
       [ 11,  22,  33],
       [101, 202, 303],
       [111, 222, 333]])
1 голос
/ 14 апреля 2020

Просто бросьте np.all ()

def twoCond():
    a = np.array([[  1,   2,   3],[ 11,  22,  33],[101, 202, 303],[100, 200, 303],[111, 222, 333]])
    a = np.delete(a, np.where((a[:, 2] == 303) & (a[:,1] == 200)), axis=0)
    return a

Результаты:

>>> twoCond()
array([[  1,   2,   3],
       [ 11,  22,  33],
       [101, 202, 303],
       [111, 222, 333]])
...