久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

python numpy實現rolling滾動案例

瀏覽:15日期: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 編程
相關文章:
主站蜘蛛池模板: 久久久成人av | 成全视频免费观看在线看黑人 | 国产在线精品一区 | 日韩一级av毛片 | 日韩精品一区二区三区在线观看 | 大香伊蕉在人线视频777 | 欧美精品在线视频 | 亚洲午夜精品一区二区三区 | 欧美久久久网站 | 犬夜叉在线观看 | av黄色在线播放 | 美女久久久 | 亚洲综合激情网 | 伊人免费网 | 国产精品毛片无码 | 亚洲精品福利网站 | 四虎av| 麻豆专区一区二区三区四区五区 | 91嫩草在线 | 国产成人精品一区二区在线 | 久久国产高清 | 日韩在线成人 | 亚洲一区二区视频在线观看 | 亚洲艹 | 一区二区在线播放视频 | 国产综合精品一区二区三区 | 国产精品第一国产精品 | 国产精品久久久久9999赢消 | 毛片精品| 国产一级一级毛片女人精品 | 日韩一区二区中文字幕 | 国产精品中文字幕在线播放 | 天天干天天操天天干 | 一区二区三区国产 | 夜夜艹 | 午夜色播| 国产精品亚洲一区 | 国产视频久久久久久久 | 亚洲男人天堂网 | 在线中文| www.99日本精品片com |