Python time-lat-lon数组操作和分组

时间:2014-05-20 11:33:41

标签: python arrays numpy python-datetime

对于表示时间 - 纬度 - 经度的t-x-y数组以及t-x-y网格的值包含任意测量变量的位置,我怎样才能组合'对于给定时间条件,数组的x-y个切片?

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

out的形状大约为t-x-y,这是(2000, 50, 50)(50, 50)个不同时间的值网格。假设唯一条件的数量(无论是按月或按年切片)是<<<<而不是2000数组中的元素总数。

实现这一目标的最pythonic方法是什么?将使用许多数据集重复此操作,因此优选计算上有效的解决方案。我对python来说比较新(我甚至无法弄清楚如何创建一个示例数组供你测试)所以请随意推荐其他可能有用的模块。 (我看过Pandas,但它似乎主要处理1d时间序列数据......?)

修改

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

t

所以a是随机数据的数组,t是(比方说)你的数组代表一年中的几个月,在这种情况下只是简单的整数。在这个例子中,每个月有83个实例。我们如何分离出对应于t = 1时的>>> 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] x-y个切片(创建月度平均数据集)?

1 个答案:

答案 0 :(得分:0)

(my)问题的一个可能答案,使用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)

任何人都可以改进这一点或在这里看到任何问题吗?