NumPy: вычисления и устройство массивов

NaN в числовых массивах: обнаружение и nan-устойчивые агрегаты

Содержание курса

Маска пропусков: np.isnan, np.any, np.all и подсчёт NaN в одномерном массиве

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая:

  1. Читает из stdin одну строку с токенами через пробел. Токен nan (строчными буквами) означает пропуск, остальные токены — вещественные числа. Создаёт одномерный массив arr через np.array(..., dtype=float).
  2. Вычисляет булеву маску mask = np.isnan(arr). Выводит маску как строку целых чисел 0/1 через пробел (True → 1, False → 0), затем её shape и dtype в одну строку через пробел.
  3. Выводит строку any=<bool> all=<bool>, где <bool> — результат np.any(mask) и np.all(mask) в виде True/False.
  4. Выводит число NaN-элементов, вычисленное через np.sum(mask), в виде целого числа.
  5. Выводит число не-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)
  • Тест 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 секунд.

Отправьте решение, чтобы увидеть результаты тестов.