У меня есть отсортированный массив действительных чисел в моей программе Ruby. Я хочу удалить все элементы, которые очень «похожи»: их разница меньше заданного предела. Итак, наконец, я хочу сохранить только те элементы, которые хорошо отличимы от других, отдельные элементы: в исходном массиве нет других элементов, которые ближе к ним, чем предел.
В настоящее время я экспериментирую с этими двумя подходами:
limit=0.5
vvs=vv.sort.reverse.each_cons(2).map{|a,b| (a-b).abs<limit ? nil : a}.compact
а также
vvs=vv.each_cons(3).map{|a,b,c| (a-b).abs<limit && (b-c).abs<limit ? nil : b}.compact
Мне нужен этот метод для моей программы, которая пытается синхронизировать субтитры, и значения могут содержать некоторый шум. В связи с этим я хочу анализировать только те отдельные элементы, которые можно различить даже при наличии некоторого аддитивного шума.
Мои исходные реальные данные из «Уловки 22» https://pastebin.com/mRiS02mb
arr
и неотрицательное число с плавающей запятойlimit
, я хочу вернуть массив, содержащий те элементыn
изarr
, для которых абсолютная разница междуn
и его непосредственные соседи (или соседи, еслиn
является первым или последним элементом массива) не больше, чемlimit
. - person Cary Swoveland   schedule 27.06.2019