Алгоритм сегментирования временных рядов на основе соседних значений [python] - PullRequest
0 голосов
/ 30 марта 2020

У меня есть несколько временных рядов или просто списки целых чисел, как показано ниже -

array([   1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,   55,   57,   58,   59,   59,   57,   59,   56,   58,   58,
         57,   58,   58,   59,   57,   57,   59,   56,   60,   58,   59,
         55,   59,   60,   56,   57,   60,   56,   59,   56,   58,   58,
         57,   61,   55,   58,   58,   59,   57,   58,   58,   58,   58,
         58,   58,   66,   49,   59,   59,   56,   57,   59,   60,   58,
         56,   57,   60,   56,   60,   55,   59,   59,   56,   59, 3057,
          1,    1,    1,    1,    2,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,   41,   59,   57,   58,   59,   59,   57,   58,   59,   56,
         59,   57,   58,   57,   59,   57,   60,   57,   57,   58,   57,
         58,   58,   57,   58,   64,   52,   58,   59,   59,   55,   58,
         59,   57,   58,   58,   58,   60,   57,   56,   58,   59,   57,
         58,   57,   59,   59,   57, 3055,    2,    1,    1,    1,    1,
          1,    1,    2,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1], dtype=int64)

Я пытаюсь реализовать функцию python, которая выдала бы мне список сегментированных областей из списка, как показано ниже :

[1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1],

[55,   57,   58,   59,   59,   57,   59,   56,   58,   58,
57,   58,   58,   59,   57,   57,   59,   56,   60,   58,   59,
55,   59,   60,   56,   57,   60,   56,   59,   56,   58,   58,
57,   61,   55,   58,   58,   59,   57,   58,   58,   58,   58,
58,   58,   66,   49,   59,   59,   56,   57,   59,   60,   58,
56,   57,   60,   56,   60,   55,   59,   59,   56,   59],

[1,    1,    1,    1,    2,    1,    1,    1,    1,    1,    1,
 1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1],
...

Примечание: 3057 не добавляется, поскольку является выбросом и имеет длину только 1 (это не является обязательным, поскольку его можно отфильтровать позже легко основывается на длине).

Я могу подумать о некотором ad-ho c logi c, но я ищу надежный подход Pythoni c (диапазон значений будет в пределах (1, ~ 10000)).

1 Ответ

0 голосов
/ 30 марта 2020

Так как вы не определили, что вы хотите, чтобы слово "по-другому" было, я оставил это как функцию

def diff(x, y):
    return np.abs(x-y) > 20

np.split(ary, np.argwhere(diff(ary[1:], ary[:-1])).T[0] + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...