Numpy переворачивает логический массив по индексу?

#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] … нет необходимости в двоичном отрицании…