【问题标题】:python 3D numpy array time indexpython 3D numpy数组时间索引
【发布时间】:2025-12-13 01:05:04
【问题描述】:
有没有办法在 3 维上使用某种形式的时间索引(日期时间等)来索引 3 维数组?
我的问题是我正在对数千幅雷达图像进行时间序列分析,并且我需要获取例如月平均值。但是,如果我只是简单地对第 3 维中的每 31 个数组进行平均,由于月份较短和缺少数据等,它会变得不准确。
【问题讨论】:
标签:
python
arrays
datetime
numpy
multidimensional-array
【解决方案1】:
您可以使用 pandas 模块。它支持按日期/日期时间范围进行索引。它还支持多索引,允许您以二维方式处理多维数据。
>>> 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.org/pandas-docs/stable/advanced.html
【解决方案2】:
发布我使用的伪解决方案:
这里的问题是 3d 数组数据(即卫星、雷达)缺乏日期时间索引。虽然 pandas 中有时间序列函数,但没有数组(据我所知)。
这个解决方案是可能的,因为我使用的数据文件名称中有日期时间,例如“200401010000”是“yyyymmddhhMM”。
- 用所有数据构建一个 3d 数组(在某些地方缺少时间)。
- 使用数据文件列表(os.listdir),创建时间戳列表(长度匹配3d数组长度)
- 使用时间戳 (2) 作为 dfa 索引创建 dfa,并创建运行整数的列“inx”(range(0, len(array) = integers = 3d 数组的索引)
- 使用数据开始和结束时间以及已知的数据频率创建日期时间索引(不丢失日期时间)。使用它作为索引创建一个新的 dfb。
- (4) 中的 dfb 与 (3) 中的 dfa 左合并。 Aka dfa 现在具有准确的日期时间索引和包含 3d 数组索引位置的“inx”列,并且 nan 缺少数据。
然后您可以使用它重新映射 df,例如 1 天,获取“inx”的最小值和最大值。这为您提供了数组函数的开始 - 结束位置。
您还可以在缺失的日期时间插入 nan 数组(即 'inx' min max = nan),以便您的 3d 数组与实际日期时间的长度相匹配。
如果您有 Q 或者您知道此问题的更好解决方案/包,请发表评论。