Преобразовать список значений суточных осадков за сутки

11

Допустим, у меня есть список значений осадков по часам, каждый из которых показывает, сколько осадков выпало за предыдущие 24 часа, упорядоченные по дате. Например:

{
    '2012-05-24 12:00': 0.5, // .5" of rain from 5/23 12:00 - 5/24 11:59
    '2012-05-24 11:00': 0.6, // .6" of rain from 5/23 11:00 - 5/24 10:59
    '2012-05-24 10:00': 0.6, // .6" of rain from 5/23 10:00 - 5/24 09:59
    ...
    '2012-05-23 10:00': 0
}

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

Визуализация набора данных

P(N)    [.....======================]
P(N-1)  [....======================.]
P(N-2)  [...======================..]
P(N-3)  [..======================...]
I want  [..........................=]

Большое спасибо за любую помощь.

Майк Гриффит
источник
Означает ли .6 "дождя с 5/23 11:00 - 5/24 10:59, что за это время выпало 0,6" дождя или в среднем 0,6 "дождя за этот период?
System Down
Бывший. Это сумма дождя по часам за предыдущие 24 часа. Я хочу выяснить, как «прервать» этот последний час.
Майк Гриффит
1
Это на удивление сложно. Каждое записанное вами значение состоит из 24 неизвестных суммированных сумм. Чтобы решить эту проблему, вам понадобится 24 уравнения, то есть 24 уравнения, которые содержат одинаковые точные неизвестные, но поскольку у вас есть скользящее окно, это не так. Я не могу себе представить, что это «неразрешимо», но мне это точно кажется. Еще один способ думать об этом: вы получаете одно неизвестное за каждое P(N-x)добавляемое вами, так что в итоге число уравнений и неизвестных снова выровняется.
Себастьянгеигер
3
Мне интересно, будет ли это лучшим вопросом для: cstheory.stackexchange.com
FrustratedWithFormsDesigner
2
@FrustratedWithFormsDesigner или math.stackexchange.com ?
CaffGeek

Ответы:

8

Предполагая, что набор данных всегда состоит из последовательных 24-часовых окон (т. Е. Первая точка данных не является 1-часовым окном) ...

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

  • Случай 1: В 12:30 каждый день идет дождь 24 ".
  • Случай 2: дожди 1 "в 30 минут каждый час навсегда.

В обоих случаях ваш P(N) = 24"для всех N.

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


Кроме того, мы также можем продемонстрировать, что не всегда верно, что проблема всегда неразрешима. Проще всего, если P(N) = 0"для всех N, есть только один возможный характер дождя, чтобы объяснить это: ноль дюймов дождя в каждый час.


Поэтому более интересной проблемой является определение того, какие характеристики набора данных делают проблему разрешимой. Обычно, если у вас есть набор данных хотя бы с одним Nтаким P(N) = 0", то у вас есть решение.

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

Стивен
источник
5

вам нужно перебирать данные до тех пор, пока вы не найдете 0 осадков, а затем рассчитываете вперед с этой точки, как описывает SnOrus. Если ни одна точка данных не равна 0, то я не думаю, что это можно решить, если вы не определите самую раннюю запись как 1 час после начала времени, поэтому точки раньше, чем это, не определены.

Также было бы возможно рассчитать в обратном направлении по времени от чтения 0, делая то же самое в обратном порядке (хотя вы получите по крайней мере 24 0 с подряд.

Ryathal
источник
Интересное ограничение данных, которое делает это возможным, состоит в том, что количество осадков никогда не может быть отрицательным, поэтому при нулевом значении вы знаете, что 24 предыдущих часа должны были быть равны нулю.
Скотт Уитлок
0

P (n) - P (n-1) ограничено до> = 0

Где P () - количество осадков, зарегистрированных за 24 часа до n.

... должен дать вам количество дождя за час до P(n).

Стивен Эверс
источник
Это будет рассчитывать -1,1 дюйма за 12:00. Звучит маловероятно. Если 0,2 дюйма было 24-часовой мерой в 11:00 23-го числа, то правильный ответ должен быть .1
Эдвард Стрендж
Если N равно «5/24 12:00 вечера», P (N) включает в себя окно с 5/23 в 12:00 вечера до 5/24 в 11:59 утра. Затем P (N-1) включает окно с 5/23 в 11:00 до 5/24 в 10:59. Я хочу знать, что произошло в окне с 11:00 до 11:59, но простое вычитание этих двух также вводит дополнительное «окно» в предыдущий день. Смотрите обновленное описание для визуального представления.
Майк Гриффит
@MikeGriffith: см. Мое редактирование. Я считаю, что я был прав, но вам нужно связать результат с> = 0. (<= 0 будет означать, что дождя не было). Если я не понимаю проблему.
Стивен Эверс
@SnOrfus: У вас все еще есть два неизвестных значения в этой точке.
Дейнит
0

Это не полный ответ, я на работе и уже потратил на это кучу времени ... кроме того, мне нужно больше данных, чтобы понять, верна ли моя догадка.

Давайте назовем P (x) 24-часовой мерой в момент x.

Рассмотрите следующий сценарий перекрытия:

|H1|H2|H3.............|H23|H24|H25|H26 ................ |H46|H47|H48|
|-----------------P(X)--------|-----------------P(X-24)-------------|
   |----------------------P(X-1)--|

P (X) - P (X-1) + H25 = H1.

Таким образом, вам нужно рассчитать H25. Я считаю, что решение будет лежать где-то в системе, созданной из P (X), P (X-1) и P (X-24).

Эдвард Стрендж
источник
0

В течение двух последовательных часов n (сейчас) и n-1 (час до настоящего момента) у вас есть сумма осадков за 24 часа (T), состоящая из 24-часовых чисел осадков (P):

T(n) = P(n) + P(n-1) + P(n-2) + ... + P(n-22) + P(n-23)
T(n-1) = P(n-1) + P(n-2) + P(n-3) +... + P(n-23) + P(n-24)

Так:

T(n) - T(n-1) = P(n) - P(n-24)

(Термины P (n-1) ... P (n-23) дублируются как в T (n), так и в T (n-1), поэтому их вычитание дает 0.) Переупорядочив, вы получите:

P(n) = T(n) - T(n-1) + P(n-24)

Теперь вы не можете понять, что такое P (n), если не знаете, что такое P (n-24). Вы можете пойти дальше в данных, чтобы вычислить P (n-24), но чтобы получить это, вам нужно P (n-25) и так далее до бесконечности. То, что вам нужно, это величина осадков за любой час, который дольше, чем 24 часа. Если у вас есть это, вы можете рассчитать почасовые осадки для всех последующих часов.

Калеб
источник
1
+1 «То, что вам нужно, это величина осадков за любой час, который дольше, чем 24 часа». Или значение 0 "для 24-часового периода.
CaffGeek
@Chad Это, конечно, один из способов получить это.
Калеб