将24小时降水值列表转换为按小时总计


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  [..........................=]

非常感谢您的帮助。


从5/23 11:00-5/24 10:59开始出现0.6英寸的降雨,是否意味着在这段时间内下降了0.6英寸的降雨,或者在此期间平均下降了0.6英寸的降雨?
系统停机

前者。这是前24小时每小时降雨的总和。我想弄清楚最后一个小时如何“休息”。
Mike Griffith 2012年

1
这出奇地困难。您记录的每个值都由24个未知数字组成。您将需要24个方程来解决该问题,也就是说,其中有24个方程具有完全相同的未知数,但是因为您有一个并非如此的滑动窗口。我无法想象这是“无法解决的”,但在我看来确实如此。另一种思考的方式是:每增加一个,您就会获得一个未知数P(N-x),因此最终,方程式和未知数的数量甚至会再次消失。
sebastiangeiger 2012年

3
我想知道这是否是一个更好的问题:cstheory.stackexchange.com
FrustratedWithFormsDesigner

2
@FrustratedWithFormsDesigner还是math.stackexchange.com
CaffGeek 2012年

Answers:


8

假设数据集始终由连续的24小时窗口组成(即,第一个数据点不是1小时窗口)...

至少在一般情况下,不是一个可解决的问题,因为存在一个反例,其中至少两个降雨模式映射到一个数据集。

  • 情况1:永远每天早上12:30下雨24英寸。
  • 情况2:每小时每小时30分钟永远下雨1英寸。

在这两种情况下,您P(N) = 24"都是所有人N

由于没有一种情况可以从这一数据集中得出,因此从一般意义上讲该问题无法解决。


顺便说一句,我们还可以证明问题始终无法解决并不一定是正确的。最简单的说,如果P(N) = 0"全部考虑N,只有一种可能的降雨模式可以解决:每小时零英寸的降雨。


因此,确定数据集的哪些特征可以解决问题是一个更有趣的问题。琐碎地讲,如果您的数据集包含至少一个N诸如that 的数据集P(N) = 0",那么您就有一个解决方案。

如果有其他属性可以使问题对于给定的数据集可解决,我不会感到惊讶。找到这些应该是一个有趣的挑战。同时,证明没有人存在是同样有趣的事情。


5

您需要遍历数据,直到找到0个降水期,然后再按照SnOrus的描述从该点开始进行计算。如果没有数据点为0,那么我认为这无法解决,除非您将最早的条目定义为时间开始后1小时,所以早于该点的点是不确定的。

也可以从0读数向后计算时间,反过来做同样的事情(尽管您将连续获得至少24个0。


使数据成为可能的有趣约束是,降水永远不会为负,因此,如果值为零,则您知道前24小时必须为零。
Scott Whitlock

0

P(n)-P(n-1)界> = 0

其中P()是n之前24小时记录的降水量。

...应该在下雨前一小时给你下雨P(n)


那将为12:00计算-.1英寸。听起来不太可能。如果0.2英寸是23日11:00的24小时测量,那么正确答案应该是.1
爱德华·

如果N为“ 5/24 12:00 pm”,则P(N)包括从12:00 pm的5/23到11:59 am的5/24的窗口。然后P(N-1)包含一个从11:00 am的5/23到10:59 am的5/24的窗口。我想知道窗口从11:00 am-11:59am发生了什么,但是仅将两者相减会在前一天引入一个额外的“窗口”。有关视觉表示,请参见更新的说明。
迈克·格里菲斯

@MikeGriffith:看看我的编辑。我相信我是对的,但是您需要将结果限制为> = 0。(<= 0表示没有下雨)。除非我误解了这个问题。
史蒂文·埃弗斯

@SnOrfus:那时您仍然有两个未知值。
丹妮丝2012年

0

这不是一个完整的答案,我正在工作,并且已经在上面花了很多时间...此外,我需要更多数据以查看我的预感是否正确。

我们将P(x)称为时间x处的24小时度量。

考虑以下重叠方案:

|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-24)是什么,否则您将无法确定P(n)是什么。您可以进一步返回数据来计算P(n-24),但要获得该值则需要P(n-25),等等。然后,您需要的是24小时之前的任何一个小时的降水值。如果有的话,您可以计算随后所有小时的每小时降水量。


1
+1“那么,您需要的是早于24小时的任何一个小时的降水值。” 或24小时内的0"的数值。
CaffGeek

@Chad当然是获得它的一种方法。
卡勒布(Caleb)2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.