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

python– 对numpy数组切片进行采样的最快方法是什么?,第1张

概述我有一个3D(时间,X,Y)numpy数组,包含6个小时的时间序列几年. (比如5).我想创建一个采样时间序列,其中包含从可用记录中随机抽取的每个日历日的1个实例(每天5种可能性),如下所示.> Jan 01:2006> Jan 02:2011> Jan 03:2009> ......这意味着我需要从01/01/2006获取4个值,从

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

> Jan 01:2006
> Jan 02:2011
> Jan 03:2009
> ……

这意味着我需要从01/01/2006获取4个值,从2011年2月1日起获取4个值等.
我有一个工作版本,其工作原理如下:

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

例:

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

这似乎有效,但我想知道这是否是解决我问题的最佳/最快方法?速度很重要,因为我在循环中这样做,adn将受益于测试尽可能多的情况.

我这样做了吗?

谢谢

编辑
我忘了提到我过滤了输入数据集以删除闰年的第29个feb.

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

最佳答案2008年是366天,所以不要重塑.

看看scikits.timeseries:

import scikits.timeserIEs as tsstart_date = ts.Date('H','2006-01-01 00:00')end_date = ts.Date('H','2010-12-31 18:00')arr3d = ... # your 3D array [time,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,Y] array with data from that day

使用t的属性来使其与闰年一起工作. 总结

以上是内存溢出为你收集整理的python – 对numpy数组切片进行采样的最快方法是什么?全部内容,希望文章能够帮你解决python – 对numpy数组切片进行采样的最快方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存