Перцентили инференса после прогрева: задача Python
Первые вызовы модели могут сильно отличаться от последующих, поэтому в отчёте нужно отдельно обработать прогрев. Напишите функцию расчёта перцентилей по сохранённым замерам; способ интерполяции и порядок ответа полностью заданы в условии.
Откройте программу платного курса Computer Vision Engineer, чтобы продолжить практику с данными, моделями и CV-сервисом.
Перцентили задержки после прогрева
Задание
Напишите функцию latency(times, warmup, levels), которая превращает сырой журнал замеров в отчёт по перцентилям.
times — время вызовов в миллисекундах в том порядке, в каком они замерялись. Первые warmup значений — прогрев, они выбрасываются целиком. По оставшимся считается перцентиль для каждого уровня из levels; ответ возвращается списком в том же порядке, что и уровни.
Перцентиль считается с линейной интерполяцией, как это делает numpy. Оставшиеся замеры сортируются по возрастанию, для уровня берётся позиция , где — число замеров. Если позиция целая, ответ — значение на ней. Если нет, ответ лежит между соседними значениями пропорционально дробной части: значение слева плюс разность соседей, умноженная на эту дробную часть.
Уровни приходят числами от 0 до 100 и не обязательно по возрастанию. После прогрева остаётся хотя бы один замер.
Пример
times = [2503.0, 55.0, 26.0, 24.0, 22.0, 23.0, 22.5, 21.5]
latency(times, 3, [50, 95]) # [22.5, 23.8]
Три первых замера ушли в прогрев вместе с двухсекундным первым вызовом. Осталось пять значений, по возрастанию это 21.5, 22.0, 22.5, 23.0 и 24.0. Для p50 позиция равна 2 — ровно середина, ответ 22.5. Для p95 позиция 3.8: между 23.0 и 24.0, восемь десятых пути от первого ко второму.
Примечание
Журнал уже собран и приходит аргументом, замерять ничего не нужно. Стандартной библиотеки достаточно, numpy здесь недоступен. Возвращайте список чисел; вызывать функцию самостоятельно не нужно, тесты сделают это сами. Значения сравниваются с точностью до девятого знака, округлять результат не надо.
Что проверяется
Код проверок скрыт, так что вот полный список того, что в них разбирается:
- формат ответа: список чисел по числу уровней;
- пример из условия;
- края шкалы: уровни 0 и 100;
- прогрева нет — считаются все замеры;
- после прогрева остался один замер: все уровни дают одно и то же значение;
- дробная позиция между соседними замерами;
- уровни идут не по возрастанию — порядок ответа повторяет порядок уровней;
- все замеры одинаковые и вход, пришедший неотсортированным;
- дубликаты значений после прогрева;
- сто замеров подряд и длинный журнал, где двухсекундный первый вызов остался в прогреве.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
