2015-10-08 3 views
0

Временной ряд растет неопределенно, но я хочу, чтобы иметь возможность посмотреть график с начала t0 до текущего шага времени t. Это означает, что временной масштаб графика будет постоянно сжимается.Как построить график временных рядов без запоминания всей серии?

Конечно, я могу хранить все данные временных рядов, и на каждом шаге я просто перерисовываю сюжет с новой шкалой. Но что, если память также ограничена?

Предположим, что программисту разрешено хранить массив памяти только из N номеров (они могут хранить любое число в нужном массиве).

Как программист может построить график, который сохраняет примерный форму истинного графика, несмотря на ограниченную память?

ответ

0

Я нашел простое решение, которое может нанести произвольно длинный временной ряд без, упускающий из виду начальную часть.

Уловка: когда график достигает правого края графика, перемасштабируйте весь график на 1/2 и поместите сжатый график в левую половину. Затем начните печать в середине и далее.

Повторяя это, график заканчивается наличием шкалы времени «log», где левая сторона экспоненциально сжата, но пользователь все еще может видеть «форму» вещей в далеком прошлом.

Алгоритм:

if (t > max_t)     // t is time index 
    // compress array by 1/2 
    for (i = 0 to arraySize) 
     a[i] = (a[i * 2] + a[i * 2 + 1])/2; 
    // start from mid-point 
    t = arraySize/2; 
    [ re-plot the graph from 0 to 1/2 arraySize ] 
else 
    [ plot the next datum normally ] 
    ++t 

Пример выходных данных (ошибка в алгоритме машинного обучения уменьшается медленно):

enter image description here

Смежные вопросы