python 3D numpy数组时间索引



是否有一种方法可以使用某种形式的时间索引(datetime等)在三维上索引三维数组?

我的问题是,我正在对几千张雷达图像进行时间序列分析,我需要得到,例如,每月的平均值。然而,如果我简单地在第三维中平均每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.htmlhttp://pandas.pydata.org/pandas-docs/stable/timeseries.htmlhttp://pandas.pydata.org/pandas-docs/stable/advanced.html

张贴我使用的psuedo解决方案:

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

这个解决方案是可能的,因为我使用的数据文件在名称中有日期时间。'200401010000'是'yyyymmddhhMM'。

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

使用这个,你可以重新计算df,例如1天,取'inx'的最小值和最大值。这给了你数组函数的开始和结束位置。

您还可以在缺少的日期时间插入nan数组(例如:'inx' min Max = nan),以便您的3d数组匹配实际日期时间的长度。

如果你有问题,或者你知道一个更好的解决方案/包来解决这个问题,请评论。

相关内容

最新更新