Я видел этот код в некоторых примерах онлайн и пытаюсь понять и изменить его:
c = a[b == 1]
- Почему это работает? Похоже,
b == 1
возвращает true для каждого элемента b
, который удовлетворяет равенству. Я не понимаю, как что-то вроде a[True]
заканчивается вычислением чего-то вроде «Для всех значений в a, для которых одинаковое индексированное значение в b
равно 1, скопируйте их в c
»
a
, b
и c
- все массивы NumPy одинаковой длины, содержащие некоторые данные.
Я довольно долго искал, но даже не знаю, как это назвать.
- Если я хочу добавить второе условие, например:
c = a[b == 1 and d == 1]
Я получаю
ValueError: Значение истинности массива с более чем одним элементом является неоднозначным. Используйте a.any () или a.all ()
Я знаю, что это происходит потому, что эта комбинация операций равенства неоднозначна по причинам, объясненным здесь , но я не уверен, как добавить a.any()
или a.all()
в это выражение в одну строку.
РЕДАКТИРОВАТЬ :
На вопрос 2 c = a[(b == 1) & (d == 1)]
работает. Любой вклад в мой первый вопрос о том, как / почему это работает?