gpt4 book ai didi

python - 对 numpy 数组切片进行采样的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-02 09:51:46 24 4
gpt4 key购买 nike

我有一个 3D(时间,X,Y)numpy 数组,其中包含几年内的 6 个每小时时间序列。 (说5)。我想创建一个采样时间序列,其中包含从可用记录中随机抽取的每个日历日的 1 个实例(每天 5 种可能性),如下所示。

  • 2006 年 1 月 1 日
  • 2011 年 1 月 2 日
  • 2009 年 1 月 3 日
  • ...

这意味着我需要从 01/01/2006 获取 4 个值,从 02/01/2011 获取 4 个值,等等。我有一个工作版本,其工作原理如下:

  • reshape 输入数组以添加“年份”维度(时间、年份、X、Y)
  • 创建一个由 0 到 4 之间随机生成的整数组成的 365 个值数组
  • 使用 np.repeat 和整数数组仅提取相关值:

示例:

sampledValues = Variable[np.arange(numberOfDays * ValuesPerDays), sampledYears.repeat(ValuesPerDays),:,:]

这似乎有效,但我想知道这是否是解决我的问题的最佳/最快方法?速度很重要,因为我在循环中执行此操作,adn 将从测试尽可能多的案例中受益。

我这样做对吗?

谢谢

编辑我忘了提及我过滤了输入数据集以删除闰年的 2 月 29 日。

基本上,该操作的目的是找到一个在均值等方面与长期时间序列很好匹配的 365 天样本。如果采样时间序列通过了我的质量测试,我想将其导出并重新开始。

最佳答案

2008 年有 366 天,所以不要 reshape 。

看看scikits.timeseries :

import scikits.timeseries as ts

start_date = ts.Date('H', '2006-01-01 00:00')
end_date = ts.Date('H', '2010-12-31 18:00')
arr3d = ... # your 3D array [time, X, Y]

dates = ts.date_array(start_date=start_date, end_date=end_date, freq='H')[::6]
t = ts.time_series(arr3d, dates=dates)
# just make sure arr3d.shape[0] == len(dates) !

现在您可以使用日/月/年对象访问 t 数据:

t[np.logical_and(t.day == 1, t.month == 1)]

例如:

for day_of_year in xrange(1, 366):
year = np.random.randint(2006, 2011)

t[np.logical_and(t.day_of_year == day_of_year, t.year == year)]
# returns a [4, X, Y] array with data from that day

使用 t 的属性,使其也适用于闰年。

关于python - 对 numpy 数组切片进行采样的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com