[英]What is the fastest way to sample slices of numpy arrays?
我有一個3D(時間,X,Y)numpy數組,包含6個小時的時間序列幾年。 (比如5)。 我想創建一個采樣時間序列,其中包含從可用記錄中隨機抽取的每個日歷日的1個實例(每天5種可能性),如下所示。
這意味着我需要從01/01/2006獲取4個值,從2011年2月1日起獲取4個值等。我有一個工作版本,其工作方式如下:
例:
sampledValues = Variable[np.arange(numberOfDays * ValuesPerDays), sampledYears.repeat(ValuesPerDays),:,:]
這似乎有效,但我想知道這是否是解決我問題的最佳/最快方法? 速度很重要,因為我在循環中這樣做,adn將受益於測試盡可能多的情況。
我這樣做了嗎?
謝謝
編輯我忘了提到我過濾了輸入數據集以刪除閏年的第29個。
基本上,該操作的目的是找到一個365天的樣本,與平均值等方面的長期時間序列匹配良好。如果采樣的時間序列通過我的質量測試,我想導出它並重新開始。
2008年是366天,所以不要重塑。
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
的屬性來使其與閏年一起工作。
我不認為真正需要重塑數組,因為您可以在采樣過程中嵌入年份信息,並使數組保持原始形狀。
例如,您可以生成隨機偏移(從0到365),並選擇具有索引的切片,例如, n*365 + offset
。
無論如何,我不認為你的問題是完整的,因為我不太明白你需要做什么,或為什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.