繁体   English   中英

Python 3D Numpy数组时间索引

[英]python 3D numpy array time index

有没有一种方法可以在第三维上使用某种形式的时间索引(日期时间等)来为三维数组建立索引?

我的问题是我正在对几千个雷达图像进行时间序列分析,因此我需要获取例如月平均值。 但是,如果我只是简单地对第3维中的每31个数组求平均值,则由于较短的月份和缺少数据等原因而导致计算不准确。

您可以使用pandas模块。 它支持按日期/日期时间范围编制索引。 它还支持多重索引,使您能够以2D方式处理多维数据。

>>> rng = pd.date_range('1/1/2016', periods=100, freq='D')
>>> rng[:5]

DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04', '2016-01-05'], dtype='datetime64[ns]', freq='D')

>>> ts = pd.Series(np.random.randn(len(rng)), index=rng)
>>> ts.head()

2016-01-01    0.119762
2016-01-02   -0.010990
2016-01-03    0.226537
2016-01-04   -0.087559
2016-01-05    0.484426
Freq: D, dtype: float64

>>> ts.resample('M').mean()

2016-01-31   -0.171578
2016-02-29    0.055878
2016-03-31   -0.243225
2016-04-30   -0.015087
Freq: M, dtype: float64

检查以下一些详细信息:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DatetimeIndex.html http://pandas.pydata.org/pandas-docs/stable/timeseries.html http://pandas.pydata。组织/大熊猫-DOCS /稳定/ advanced.html

发布我使用的伪解决方案:

这里的问题是缺乏3D阵列数据(如卫星,雷达)的日期时间索引。 虽然在熊猫中有时间序列函数,但没有数组(据我所知)。

该解决方案之所以可行,是因为我使用的数据文件的日期时间名为“ 200401010000”,即“ yyyymmddhhMM”。

  1. 构造一个包含所有数据的3D数组(缺少时间)。
  2. 使用数据文件列表(os.listdir),创建时间戳列表(长度与3d数组长度匹配)
  3. 使用时间戳记(2)作为dfa索引创建dfa,并创建运行整数的列“ inx”(range(0,len(array)=整数= 3d数组的索引)
  4. 使用数据的开始和结束时间以及已知的数据频率(不丢失日期时间)创建日期时间索引。 使用此作为索引创建一个新的dfb。
  5. (4)中的dfb与(3)中的dfa合并。 Aka dfa现在具有准确的日期时间索引和包含3d数组索引位置的“ inx”列,并且在缺失数据时具有nan。

然后,您可以使用“ inx”的最小值和最大值将其映射为1天。 这为您提供了数组函数的开始-结束位置。

您还可以在错误的日期时间插入nans数组(即'inx'min max = nan),以便您的3d数组与实际日期时间的长度匹配。

评论您是否有Q,或者您知道此问题的更好的解决方案/包装。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM