3d 数组中每 n 个切片的平均值 - python

问题描述 投票:0回答:2

我有一个 3d 数组,表示一个月 30 天的每小时数据。它的形状是720x13x85(30天有720个小时)。我想取每 24 小时或 24 个切片的平均值,以便获得每日数据。这似乎是一个简单的问题,但我还没有找到一种方法,或者在论坛的其他地方找到这个确切问题的任何答案。我发现这个相关问题没有答案。

即我想要得到以下内容,并计算每天的平均值

Day1precip = precip[0:24,:,:]

等等一个月。理想情况下,我希望结果为 3d 数组,以便 newarray[0,:,:] 为 day1 等等。

python numpy multidimensional-array
2个回答
1
投票

添加一个新维度,然后取其平均值:

precip.reshape(-1, 24, *precip.shape[1:]).mean(1)

对于

reshape
来说,后面的维度总是更加连续。这意味着将第一维拆分为
30, 24
会产生 30 个块,每个块包含 24 个元素,而不是相反。


0
投票

这里有一个简单的方法来思考你想要做什么。

您希望拥有 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)

这就是疯狂物理学家本质上说的,但我发现这样更容易理解。

© www.soinside.com 2019 - 2024. All rights reserved.