Почему «Нет в numpy.asarray (…)» вызывает будущее предупреждение

Будущее предупреждение происходит, когда вы делаете что-то вроде этого:

>>> numpy.asarray([1,2,3,None]) == None 

Который в настоящее время возвращает False , но я понимаю, что вернет массив, содержащий [False,False,False,True] в будущей версии Numpy.

Как обсуждалось в списке обсуждений numpy, путь вокруг этого теста a is None .

Меня смущает такое поведение ключевого слова in с 1D-массивом по сравнению со списком:

 >>> None in [1,2,3,None] True >>> None in numpy.asarray([1,2,3,None]) __main__:1: FutureWarning: comparison to 'None' will result in an elementwise object comparison in the future False >>> 1 in numpy.asarray([1,2,3,None]) True 

EDIT (см. Комментарии). На самом деле есть два разных вопроса:

  1. Почему это вызывает FutureWarning – как будет сравниваться будущее поведение None in numpy.asarray(...) с тем, что оно сейчас?
  2. Почему разница в поведении in из list ; могу ли я проверить, содержит ли мой массив None не преобразовывая его в список или используя цикл for ?

Версия для ПК – 1.9.1, Python 3.4.1

One Solution collect form web for “Почему «Нет в numpy.asarray (…)» вызывает будущее предупреждение”

Будущее предупреждение происходит, когда вы делаете что-то вроде этого:

 numpy.asarray([1,2,3,4]) == None 

Который в настоящее время возвращает False , но я понимаю, что вернет массив, содержащий [False,False,False,True] в будущей версии Numpy.

Как я уже упоминал в комментариях, ваш пример неверен. Будущие версии numpy вернут [False ,False, False, False] , то есть False для каждого элемента массива, который не равен None . Это в большей степени согласуется с тем, как в настоящее время работают сопоставления элементов с другими скалярными значениями, например:

 In [1]: np.array([1, 2, 3, 4]) == 1 Out[1]: array([ True, False, False, False], dtype=bool) In [2]: np.array(['a', 'b', 'c', 'd']) == 'b' Out[2]: array([False, True, False, False], dtype=bool) 

Меня смущает такое поведение ключевого слова in с 1D-массивом по сравнению со списком

Когда вы проверяете x in y , вы вызываете y.__contains__(x) . Когда y является списком, __contains__ основном что-то делает в соответствии с этим:

 for item in y: if (item is x) or (item == x): return True return False 

Насколько я могу судить, np.ndarray.__contains__(x) выполняет эквивалент этого:

 if any(y == x): return True else: return False 

То есть он сначала проверяет элементарное равенство по всему массиву ( y == x будет булевым массивом размером y ). Поскольку в вашем случае вы проверяете, будет ли y == None , это повысит FutureWarning по причинам, указанным выше.

В комментариях вы также хотели знать, почему

 np.nan in np.array([1, 2, 3, np.nan]) 

возвращает False , но

 np.nan in [1, 2, 3, np.nan] 

возвращает значение True . Первая часть легко объясняется тем фактом, что np.nan != np.nan ( см. Здесь объяснение ). Чтобы понять, почему второй случай возвращает значение True , помните, что этот list.__contains__() сначала проверяет идентификатор ( is ) перед проверкой равенства ( == ). Поскольку np.nan is np.nan , второй случай вернет True .

  • RuntimeError: модуль скомпилирован по версии API версии a, но эта версия numpy равна 9
  • Прямоугольная ограничивающая рамка вокруг блобов в монохромном изображении с использованием python
  • Проблемы с теплоизоляцией Pyplot 1D
  • Python - эффективный способ найти наибольшую площадь определенного значения в массиве 2D numpy
  • Непрерывное трехмерное матричное умножение в python
  • какова роль keepdims в python
  • python 2d массив для определения
  • Использование Numpy для создания финансового ценового стола Yahoo
  • Используйте scipy.integrate.quad для интеграции комплексных чисел
  • Как преобразовать подмножество Pandas DataFrame столбцов И строк в массив numpy?
  • Простая сальто-хвостовая сварка
  •  
    Interesting Posts for Van-Lav

    Есть ли простой способ удалить элемент списка по значению?

    Как обрабатывать несколько утверждений в рамках одного элемента управления Python?

    Nump hstack – «ValueError: все входные массивы должны иметь одинаковое количество измерений», но они делают

    Разбор Outlook .msg-файлов с помощью python

    Создание словаря из структуры каталогов

    Линейное время и квадратичное время

    ImportError: Нет модуля с именем 'pandas'

    Преобразование точки в png в python

    Как получить подробную информацию о устройстве / разделе из пути к файлу в Linux (например, UUID, серийный номер жесткого диска и т. Д.)

    Функции фабрики python по сравнению с классом

    Железный питон, красивый суп, приложение win32

    Python AttributeError: объект 'module' не имеет атрибута 'SSL_ST_INIT'

    Pandon Pandas: увеличение максимального количества строк

    Pickle против полки хранения больших словарей в Python

    RabbitMQ: Как отправить словарь Python между производителем и потребителем Python?

    Python - лучший язык программирования в мире.