0

对于 t-x-y表示时间-纬度-经度的数组并且t-x-y网格的值包含任意测量变量,我如何x-y为给定时间条件“分组”数组切片?

例如,如果伴随t-array 是日期时间的一维列表,我如何找到x-y月份等于 1 的网格的元素平均值。如果t只有 10 个元素,其中月份 = 1,那么我想要一个(10, len(x), len(y))数组。从这里我知道我可以通过网格np.mean(out, axis=0)获得所需的平均值,数组操作的结果在哪里。 x-yout

的形状t-x-y近似为(2000, 50, 50),即不同时间(50, 50)值的网格。假设唯一条件的数量(无论我是按月还是按年切片)<< 比数组2000中的元素总数。t

实现这一目标的最蟒蛇方式是什么?此操作将在许多数据集上重复,因此首选计算效率高的解决方案。我对 python 比较陌生(我什至不知道如何创建一个示例数组供您测试),所以请随意推荐其他可能有帮助的模块。 (我看过 Pandas,但它似乎主要处理一维时间序列数据......?)

编辑:

作为示例数组,这是我能做的最好的事情:

>>> t = np.repeat([1,2,3,4,5,6,7,8,9,10,11,12],83)
>>> t.shape
(996,)
>>> a = np.random.randint(1,101,2490000).reshape(996, 50, 50)
>>> a.shape
(996, 50, 50)
>>> list(set(t))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

所以 a 是随机数据数组, t 是(比如说)代表一年中月份的数组,在这种情况下只是普通整数。在此示例中,每个月有 83 个实例。我们如何分离出对应于 t = 1 时的 83 个x-y切片a(以创建月平均数据集)?

4

1 回答 1

0

(我的)问题的一种可能答案,使用numpy.where

要找到 a 的切片,其中 t = 1:

>>> import numpy as np
>>> out = a[np.where(t == 1),:,:]

虽然这给出了稍微令人困惑的(至少对我而言)输出:

>>> out.shape
(1, 83, 50, 50)

但如果我们坚持我需要的意思

>>> out2 = np.mean(np.mean(out, axis = 0), axis = 0)

将结果减少到预期:

>>> out2.shape
(50,50)

任何人都可以对此进行改进或在这里看到任何问题吗?

于 2014-05-20T15:51:25.593 回答