Модифицированный Histogram
Помогите решить задачу. Результатом будет статистика для сигнала, которую он генерирует следующим образом:
- функция сначала очищает сигнал всех отсчетов с амплитудой больше ‹max_amplitude› и меньше ‹min_amplitude›,
- впоследствии повторно дискретизируйте его, объединяя каждый образец ‹bucket› (последний образец может быть неполным) в один, вычисляя их диаметр и затем округляя его (используя встроенную функцию ‹round›),
- наконец, он подсчитывает, сколько раз отдельные амплитуды появляются в модифицированном сигнале, и возвращает словарь, где ключом будет амплитуда, а значением будет количество его появлений.
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Поскольку это явно учебная задачка, кода не будет, но будут подсказки. Вообще, у вас всё расписано по пунктам уже, только код написать осталось:
- Тут нужно отфильтровать данные по условию. Проще всего это сделать с помощью списочного сокращения с условием
ifвнутри, это одна простая строчка кода. - Тут прямо написано, что нужно что-то округлить с помощью
round, но не совсем понятно, что именно. В общем, нужно разбить список на куски поbucketэлементов в каждом из кусков, посчитать по этому куску среднее арифметическое, ну и округлить его. Это тоже можно сделать с помощью списочного сокращения, плюс использовать для получения индексовrange(len(data)), но немного модифицированный - с шагомbucket. Также вам пригодятся срезы по списку. Опять же можно в одну строку это сделать. - Считать элементы в списке умеет
functools.Counter, но вам наверняка нельзя его использовать. Аналог счётчика легко пишется через словарь, можно использовать метод.getсловаря с дефолтным значением, чтобы чуть сократить код. Но если хотите написать опять же в одну строку код, то можно использовать метод спискаcount, словарное сокращение и не забыть, что в качестве ключа словаря элементы должны браться уникальные, а значит пригодится множество.
Код будет гораздо короче моего описания, но, повторюсь, учебное задание вы должны написать сами, в этом его смысл.
Я то код написал и он проходит все тесты. И он достаточно короткий и простой, только п.2 чуть более длинной строкой делается.