NaN в числовых массивах: обнаружение и nan-устойчивые агрегаты
Содержание курса
Маска пропусков: np.isnan, np.any, np.all и подсчёт NaN в одномерном массиве
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinодну строку с токенами через пробел. Токенnan(строчными буквами) означает пропуск, остальные токены — вещественные числа. Создаёт одномерный массивarrчерезnp.array(..., dtype=float). - Вычисляет булеву маску
mask = np.isnan(arr). Выводит маску как строку целых чисел0/1через пробел (True → 1, False → 0), затем еёshapeиdtypeв одну строку через пробел. - Выводит строку
any=<bool> all=<bool>, где<bool>— результатnp.any(mask)иnp.all(mask)в видеTrue/False. - Выводит число NaN-элементов, вычисленное через
np.sum(mask), в виде целого числа. - Выводит число не-NaN-элементов, вычисленное через
np.sum(~mask), в виде целого числа.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
токен_0 токен_1 ... токен_n
Токен nan (строчными буквами) — пропуск. Остальные токены — вещественные числа. Гарантируется, что в массиве есть хотя бы одно не-NaN значение и хотя бы один NaN.
Формат вывода
Ровно четыре строки:
<маска 0/1 через пробел> <shape> <dtype>
any=<bool> all=<bool>
<число NaN>
<число не-NaN>
Где <shape> — строковое представление вида (n,), <dtype> — строка bool.
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
3.0 nan 7.0 nan 1.0 5.0
Ожидаемый вывод0 1 0 1 0 0 (6,) bool any=True all=False 2 4
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
