#python #numpy
#python #numpy
Вопрос:
Скажем, у меня есть
>>> arr = np.array([True, True, False], dtype=bool)
Можно ли вызвать что-то вроде
>>> arr.flip_boolean_array_by_index(2)
[True, True, True]
Ответ №1:
Вы можете использовать оператор побитового отрицания ~
или побитовый xor ( ^
) с 1 .
arr[idx] = ~arr[idx]
или
arr[idx] ^= 1
idx
может быть индексом, срезом, «причудливым» индексом и т. Д.
Комментарии:
1.
^= True
может быть чище.2. Я знаю, как сделать это в несколько этапов. Я хочу знать, есть ли служебная функция, которая возвращает ее на место, она будет очень хорошо читаться.
3. @user2357112 Я действительно обдумывал это. С одной стороны, это чище, потому что мы выполняем логическую операцию. с другой стороны, гораздо чаще думать о xor’ing битах, чем о xor’ing (логических) логических значениях…
4. @user3557216: Есть такая функция. Я не знаю, хорошо ли он читается, и это довольно новая функция :
numpy.logical_not.at(arr, 2)
.5. или вы могли бы просто сделать это красиво и просто
arr[idx] = not arr[idx]
… нет необходимости в двоичном отрицании…