Понимание ошибок DeprecationWarning при выполнении условной индексации для массива NumPy (версия 1.11.13, Python 2.7)

Я не понимаю ошибок предупреждения об устаревании при выполнении условной индексации массивов Numpy и буду благодарен за некоторые разъяснения, надеясь, что это также принесет пользу сообществу. Давайте рассмотрим массив NumPy с именем 'block', содержащий целые числа от 1 до 12:

block = np.arange(1,13)

Я могу выбрать значения, отличные от 4, выполнив:

selection = block[block != 4]

Теперь я хочу выбрать значения, отличные от 1, 4 и 7. Если я это сделаю:

selection = block[block != np.array([1, 4, 7])]

Я получаю следующую ошибку:

__main__:1: DeprecationWarning: elementwise != comparison failed; this will 
raise an error in the future.
__main__:1: VisibleDeprecationWarning: using a boolean instead of an integer 
will result in an error in the future

Может ли кто-нибудь объяснить причину этого предупреждения и указать правильный способ выполнения этого среза (в идеале, предлагаемое решение также должно быть применимо при попытке извлечь значения из большого массива numpy, которые отличаются от значений в другом большом массиве numpy)? Обратите внимание, что после предупреждения выберите = 2, чего я тоже не понимаю.

1 ответ

Решение

Правильный код для того, что вы делаете:

selection = block[~np.isin(block, [1, 4, 7])]
Другие вопросы по тегам