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

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

python numpy實現rolling滾動案例

瀏覽:4日期: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 編程
相關文章:
主站蜘蛛池模板: 一区二区精品 | 91在线视频观看 | 中文字幕久久精品 | 久草电影网 | 国产伊人av| 色综合久| 一区二区日韩精品 | 天天干狠狠干 | 中文字幕日韩久久 | 中文字幕一区二区三区乱码图片 | 免费毛片a线观看 | 亚洲免费小视频 | 国产在线一区不卡 | 我和我的祖国电影在线观看免费版高清 | 国产精品久久久久久久毛片 | 日韩在线资源 | 成人在线激情 | 亚洲成人福利在线观看 | 日本一区二区高清不卡 | 午夜精品影院 | 日韩精品影院 | 日韩日日夜夜 | 风间由美一区二区三区在线观看 | 国产精品久久久久久久久免费桃花 | 国产资源在线观看 | 国产日韩欧美91 | 成人在线视频免费观看 | 国产精品久久久久久久久久久久久 | 亚洲精品女优 | 欧美高清dvd | 91精品国产一区二区三区四区在线 | 黄桃av| 亚洲综合中文 | 久久精选视频 | 日韩精品久久久久久 | 日本大人吃奶视频xxxx | 老司机精品福利视频 | 欧美一级一区 | 日本不卡精品 | 91精品国产乱码久久蜜臀 | 91精品国产乱码久久久久久久久 |