Модифицированный Histogram

Помогите решить задачу. Результатом будет статистика для сигнала, которую он генерирует следующим образом:

  1. функция сначала очищает сигнал всех отсчетов с амплитудой больше ‹max_amplitude› и меньше ‹min_amplitude›,
  2. впоследствии повторно дискретизируйте его, объединяя каждый образец ‹bucket› (последний образец может быть неполным) в один, вычисляя их диаметр и затем округляя его (используя встроенную функцию ‹round›),
  3. наконец, он подсчитывает, сколько раз отдельные амплитуды появляются в модифицированном сигнале, и возвращает словарь, где ключом будет амплитуда, а значением будет количество его появлений.

Ответы (1 шт):

Автор решения: CrazyElf

Поскольку это явно учебная задачка, кода не будет, но будут подсказки. Вообще, у вас всё расписано по пунктам уже, только код написать осталось:

  1. Тут нужно отфильтровать данные по условию. Проще всего это сделать с помощью списочного сокращения с условием if внутри, это одна простая строчка кода.
  2. Тут прямо написано, что нужно что-то округлить с помощью round, но не совсем понятно, что именно. В общем, нужно разбить список на куски по bucket элементов в каждом из кусков, посчитать по этому куску среднее арифметическое, ну и округлить его. Это тоже можно сделать с помощью списочного сокращения, плюс использовать для получения индексов range(len(data)), но немного модифицированный - с шагом bucket. Также вам пригодятся срезы по списку. Опять же можно в одну строку это сделать.
  3. Считать элементы в списке умеет functools.Counter, но вам наверняка нельзя его использовать. Аналог счётчика легко пишется через словарь, можно использовать метод .get словаря с дефолтным значением, чтобы чуть сократить код. Но если хотите написать опять же в одну строку код, то можно использовать метод списка count, словарное сокращение и не забыть, что в качестве ключа словаря элементы должны браться уникальные, а значит пригодится множество.

Код будет гораздо короче моего описания, но, повторюсь, учебное задание вы должны написать сами, в этом его смысл.

Я то код написал и он проходит все тесты. И он достаточно короткий и простой, только п.2 чуть более длинной строкой делается.

→ Ссылка