Поиск серий похожих, но не идентичных элементов в системе Mathematica

У меня есть список чисел. Я хочу извлечь из списка серии чисел, которые попадают в какую-то полосу и имеют некоторую минимальную длину. Например, предположим, что я хочу работать с этим списком:

thisList = {-1.2, -1.8, 1.5, -0.6, -0.8, -0.1, 1.4, -0.3, -0.1, -0.7}

с band = 1 и runLength = 3 . Хотелось бы получить

{{-0.6, -0.8, -0.1}, {-0.3, -0.1, -0.7}}

в результате. Сейчас я использую

Cases[
 Partition[thisList,runLength,1],
 x_ /; Abs[Max[x] - Min[x]] < band
]

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

thisList = {-1.2, -1.8, 1.5, -0.6, -0.8, -0.1, -0.5, -0.3, -0.1, -0.7}

дает мне

{{-0.6, -0.8, -0.1}, {-0.8, -0.1, -0.5}, {-0.1, -0.5, -0.3}, {-0.5, -0.3, -0.1}, {-0.3, -0.1, -0.7}}

, где я бы предпочел

{-0.6, -0.8, -0.1, -0.5, -0.3, -0.1, -0.7}

, не выполняя произвольного сокращения перекрывающегося результата. Какой правильный путь? Было бы неплохо, если бы при этом не использовалось разбиение данных с помощью Partition .

5
задан ArgentoSapiens 13 December 2011 в 19:32
поделиться