Постановка проблемы
Вы используете Numpy’s np.nanmedian () Функция в вашем коде, который должен игнорировать Нан
Значения при вычислении среднего значения Numpy Array.
import numpy as np a = np.array([np.NaN, np.NaN]) mean = np.nanmedian(a)
Но при использовании этого Numpy поднимает Runtimewarning: все нанесенный наном, встречающийся
сообщение:
Warning (from warnings module): File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\lib\nanfunctions.py", line 1114 overwrite_input=overwrite_input) RuntimeWarning: All-NaN slice encountered
В чем причина этого предупреждения и как это исправить?
Решение + объяснение
Причина, по которой возникает это предупреждение, потому что вы применяете np.nanmedian ()
Функция на пустом массиве. Функция не вызывает ошибки, если массив имеет хотя бы одно ненанское значение:
>>> np.nanmedian([0.42, np.NaN, np.NaN]) 0.42
Если хотя бы один элемент представляет собой числовое значение, среднее значение четко определено: Получить медиану все не Нан
элементы.
Однако, если все элементы в Numpy Array есть NP.NAN
Numpy поднимает Runtimewarning
:
import numpy as np a = np.array([np.NaN, np.NaN]) mean = np.nanmedian(a) print(mean) ''' OUTPUT: Warning (from warnings module): File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\lib\nanfunctions.py", line 1114 overwrite_input=overwrite_input) RuntimeWarning: All-NaN slice encountered nan '''
Тем не менее, вы также можете увидеть, что он все еще генерирует возвращаемое значение: Не – номер или Нан
Отказ
Поскольку этот пограничный случай правильно определен и однозначно, это вызвало некоторые программисты для Спросите Имеет ли это даже смысл выпускать это предупреждение.
💡 На мой взгляд, выдача предупреждения не имеет большого смысла в случае np.nanmedian ()
функция. От Python’s Дзэн Питона мы знаем, что «Явное лучше, чем неявное» Отказ Итак, либо поднимите исключение, и позвольте программисту справляться с ним напрямую или просто позвольте ему пройти, если все правильно определено.
Если я, как я, вы раздражены этим предупреждением, вы можете просто подавить его:
Как подавить Runtimewarning?
Менеджер контекста предупреждения .Catch_warnings
подавляет предупреждение, но только если вы действительно предвидите его. В противном случае вы можете пропустить несколько дополнительных Runtimewarning
С ты не видел приходить.
import numpy as np import warnings with warnings.catch_warnings(): warnings.simplefilter("ignore", category=RuntimeWarning) median = np.nanmedian([np.NaN, np.NaN]) print(median)
Выход без предупреждения:
nan
Однако вы должны быть уверены, что это единственное предупреждение, которое может появиться в с
Блок-среда. В противном случае вы можете пропустить несколько важных предупреждений, которые уже обсуждались.
Более безопасный путь, вероятно, будет использовать предупреждения. Фильтеррынарны (действие = «игнорировать»,)
Впустить не предвидеть Runtimewarning
с.
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.