我有一个 3d 数组,表示一个月 30 天的每小时数据。它的形状是720x13x85(30天有720个小时)。我想取每 24 小时或 24 个切片的平均值,以便获得每日数据。这似乎是一个简单的问题,但我还没有找到一种方法,或者在论坛的其他地方找到这个确切问题的任何答案。我发现这个相关问题没有答案。
即我想要得到以下内容,并计算每天的平均值
Day1precip = precip[0:24,:,:]
等等一个月。理想情况下,我希望结果为 3d 数组,以便 newarray[0,:,:] 为 day1 等等。
添加一个新维度,然后取其平均值:
precip.reshape(-1, 24, *precip.shape[1:]).mean(1)
对于
reshape
来说,后面的维度总是更加连续。这意味着将第一维拆分为 30, 24
会产生 30 个块,每个块包含 24 个元素,而不是相反。
这里有一个简单的方法来思考你想要做什么。
您希望拥有 30 天的数据,而不是 720 小时。为了实现这一点,您必须对连续 24 小时的每组进行平均。平均24小时变成1天。
因此,你可以把你的720小时分成30组,每组24小时。 (
720 = 30 x 24
)
您的形状从
(720, 13, 85)
变为 (30, 24, 13, 85)
。
换句话说,现在有 30 天,每天有 24 小时,每小时都有维度为 (13, 85)
的数据。现在,当您对每组内的 24 小时进行平均时,您会得到一个形状为 (30, 13, 85)
的数据集,这就是您正在寻找的内容。
在代码中,它看起来像:
result = precip.reshape(30, 24, 13, 85).mean(1)
这就是疯狂物理学家本质上说的,但我发现这样更容易理解。