亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

python numpy實現rolling滾動案例

瀏覽:3日期: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 編程
相關文章:
主站蜘蛛池模板: 国产一区二三区 | 国产精品国产三级在线专区 | 亚洲一区二区免费视频 | 日韩三级毛片 | 二区三区视频 | 国语对白清晰好大好白 | 欧美一级视频在线高清观看 | 在线一区播放 | 日本做爰免费大片视频 | 国产精彩视频在线观看免费蜜芽 | 亚洲天天综合色制服丝袜在线 | 精品福利视频在线观看 | 2022年国产精品久久久久 | 日本欧美成 | 偷拍自拍日韩 | 中国女警察一级毛片视频 | 国产乱码精品一区二区三区网页版 | 免费视频久久久 | 午夜影视网站 | 亚洲欧美日韩中另类在线 | 1024黄| 精品一区二区三区高清免费观看 | 农村寡妇一级毛片免费播放 | 99热成人精品国产免男男 | 国产免费爽爽视频免费可以看 | 色视频一区二区三区 | 国产在线精品视频 | 特级毛片aaaa级毛片免费 | 美女污污视频在线观看 | 国产日本三级 | 久草亚洲视频 | 欧美在线视频精品 | 日本一级大黄毛片一级 | 在线观看黄视频 | 成人小视频在线 | 青青国产成人久久91 | 国产三级黄色片 | 精品日韩在线视频 | 91精品国产综合久久青草 | 日韩一区二区三区在线播放 | 美女一级毛片免费看看 |