【问题标题】:python 3D numpy array time indexpython 3D numpy数组时间索引
【发布时间】:2025-12-13 01:05:04
【问题描述】:

有没有办法在 3 维上使用某种形式的时间索引(日期时间等)来索引 3 维数组?

我的问题是我正在对数千幅雷达图像进行时间序列分析,并且我需要获取例如月平均值。但是,如果我只是简单地对第 3 维中的每 31 个数组进行平均,由于月份较短和缺少数据等,它会变得不准确。

【问题讨论】:

  • 查找np.datetime64

标签: 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”。

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

    然后您可以使用它重新映射 df,例如 1 天,获取“inx”的最小值和最大值。这为您提供了数组函数的开始 - 结束位置。

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

    如果您有 Q 或者您知道此问题的更好解决方案/包,请发表评论。

    【讨论】: