色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

python numpy實現rolling滾動案例

瀏覽:12日期:2022-07-22 10:57:16

相比較pandas,numpy并沒有很直接的rolling方法,但是numpy 有一個技巧可以讓NumPy在C代碼內部執行這種循環。

這是通過添加一個與窗口大小相同的額外尺寸和適當的步幅來實現的。

import numpy as npdata = np.arange(20)def rolling_window(a, window): shape = a.shape[:-1] + (a.shape[-1] - window + 1, window) strides = a.strides + (a.strides[-1],) return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)rolling_window(data,10)Out[12]: array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], [ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])np.mean(rolling_window(data,10))Out[13]: 9.5np.mean(rolling_window(data,10),-1)Out[14]: array([ 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5])

補充知識:pandas中的滾動窗口rolling函數和擴展窗口expanding函數

在數據分析時,特別是在分析時間序列數據時,常會需要對一個序列進行固定長度窗口的滾動計算和分析,比如計算移動均線。只要是需要根據一個時序得到一個新的時序,就往往需要進行窗口滾動。在pandas中,DataFrame和Seies都有一個針對滾動窗口的函數,叫做rolling()。其具體的參數為:DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

其中參數window可以為一個正整數或者一個offset(可以認為是時間區間長度),通過這個參數設置窗口長度;min_periods表示窗口中需要的最小的觀測值,如果窗口中的成員個數少于這個設定的值,則這個窗口經過計算后就會返回NaN,比如,如果min_periods設為3,但當前的窗口中只有兩個成員,那么該窗口對應的位置就會返回空值;center參數如果設為True,表示在取窗口覆蓋的區間時,以當前label為中心,向兩邊取,若為False,則表示以當前label為窗口的最右側,向左側取,默認為False,要注意的是,當為True時,如果窗口長度為奇數,則中心位置很好確定,就是最中間的位置,但是如果長度為偶數,則默認中心位置為中間偏右的那一個位置;win_type參數表示不同的窗口類型,可以通過這個參數給窗口成員賦予不同的權重,默認為等權重;on參數表示指定對某一列進行rolling,而不是默認的對index進行rolling,要注意的是,當指定on參數時,指定的列必須是時間序列,不然rolling函數就會失效。

下面看一個簡單的例子。下面的例子中,當窗口長度為3,設min_periods為2時,可知結果中第一個元素為NaN,因為第一個窗口只有一個值1,由于min_periods為2,所以至少需要包含兩個數才行,故第一個值為空值,從第二個元素開始才有非空值,這就是min_periods參數的含義。當設置center為True時,如果窗口長度為偶數4,比如對于一個窗口[a,b,c,d],則中心值為中心偏右的那個位置,就是c,故此時第1個窗口覆蓋的元素為1和2,所以和為3,如下所示。

import pandas as pdimport numpy as npdf=pd.DataFrame([1,2,3,5],columns=[’a’])dfa01122335 df.rolling(3,min_periods=2).sum() a0NaN13.026.0310.0 df.rolling(4,min_periods=2,center=True).sum() a03.016.0211.0310.0

rolling函數返回的是window對象或rolling子類,可以通過調用該對象的mean(),sum(),std(),count()等函數計算返回窗口的值,還可以通過該對象的apply(func)函數,通過自定義函數計算窗口的特定的值,具體可看文檔。

從以上可以看出,rolling的窗口可以向前取值,向兩邊取值,但是沒有向后取值,實際上只需要把原序列倒序排列后再向前取值就可以實現向后取值。下面我們再講一下expanding函數,其為DataFrame.expanding(min_periods=1, center=False, axis=0),其中參數的意義和rolling一樣,只是其不是固定窗口長度,其長度是不斷的擴大的。

以上這篇python numpy實現rolling滾動案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产高清久久 | 国内自拍tv在线 | 欧美视频在线看 | a级高清免费 | 青草欧美 | 国产又色又爽黄的网站免费 | 找国产毛片 | 欧美成 人h版在线观看 | 亚洲欧美日韩国产综合高清 | 欧美日韩看看2015永久免费 | 久久久999国产精品 久久久99精品免费观看 | 久久久久久全国免费观看 | 最新欧美精品一区二区三区不卡 | 99久久精品毛片免费播放 | 一级做a爰在线就看 | 一级做a爰片性色毛片男 | 国产区最新 | 国产成人精品免费视频软件 | 精品国产v无码大片在线观看 | 国产短裙黑色丝袜在线观看下 | 在线免费观看日本视频 | 一区二区三区亚洲 | 成人毛片免费视频 | 亚洲国产日韩女人aaaaaa毛片在线 | 国产精品一区二区丝瓜 | 国产99久久九九精品免费 | 成人国产精品免费视频不卡 | 三级黄色片网址 | 国产成人18黄网站在线观看网站 | 亚洲天堂网在线观看视频 | 久久国产精品视频一区 | 国产精品视频免费 | 青青草国产免费国产是公开 | 国产午夜三级 | 国产成人精品男人的天堂538 | 91精品国产高清久久久久 | 成人天堂av | 久久亚洲精品中文字幕 | 国产欧美综合精品一区二区 | 国产欧美日韩三级 | 香蕉香蕉国产片一级一级毛片 |