当前位置: 首页 > 后端技术 > Python

时间序列平滑中的边缘数据处理技术

时间:2023-03-26 13:00:08 Python

浼楁墍鍛ㄧ煡锛岄噾铻嶅競鍦轰腑鐨勬椂闂村簭鍒楁暟鎹潅涔辨棤绔犱笖闅句互澶勭悊銆傝繖灏辨槸浜轰滑瀵归噾铻嶆暟瀛﹂鍩熷姝ゆ劅鍏磋叮鐨勯儴鍒嗗師鍥狅紒鎴戜滑鍙互鐢ㄦ潵鏇村ソ鍦扮悊瑙h秼鍔匡紙鎴栧府鍔╂ā寮忚瘑鍒?棰勬祴绠楁硶锛夌殑涓€绉嶆柟娉曟槸鏃堕棿搴忓垪骞虫粦銆備互涓嬩紶缁熸柟娉曪細绉诲姩骞冲潎-绠€鍗曘€佸鏄撱€佹湁鏁堬紙浣嗙粰鏃堕棿搴忓垪鏁版嵁涓€涓瀵熺殑鈥滄粸鍚庘€濓級锛孲avitzky-Golay杩囨护鍣?鏈夋晥浣嗘洿澶嶆潅锛屽畠鍖呭惈涓€浜涚洿瑙傜殑瓒呭弬鏁扮殑浼犵粺鏂规硶鏄痟eatsolutionequation锛岃秴鍙傛暟鏇寸洿瑙傦紝閫熷害涔熷緢蹇紒鍦ㄦ湰鏂囦腑锛屾垜浠皢鑰冭檻涓€涓◢寰鏉傜殑鏂圭▼锛屼絾瀹冨叿鏈変繚瀛樿竟鐨勬晥鏋溿€傝繖涓柟绋嬬О涓篜erona-MalikPDE锛堝亸寰垎鏂圭▼锛夛紝鍏跺钩婊戞晥鏋滃彲浠ュ湪涓嬮潰鐨勫姩鐢讳腑鐪嬪埌锛氫笂鍥炬槸鐗规柉鎷夛紙TSLA锛夋敹鐩樹环鍦?022骞翠环鏍兼晥鏋滀腑浣跨敤鐨勮竟缂樺钩婊戞柟娉曘€傛爣棰樹腑鐨勨€渢=x鈥濆搴斾簬鎴戜滑瀵瑰簭鍒楄繘琛屽钩婊戝鐞嗙殑鏃堕棿锛堜互鏃犻噺绾插崟浣嶈〃绀猴級銆傚鏋滄偍瀵逛互涓婃晥鏋滄劅鍏磋叮锛岄偅涔堟湰鏂囧皢瑙i噴浠ヤ笅鍐呭锛歅erona-MalikPDE锛堝亸寰垎鏂圭▼锛夛紝浠ュ強涓轰粈涔堜娇鐢ㄥ畠浠ュ強濡備綍姹傝В鍋忓井鍒嗘柟绋嬨€備笌鐑柟绋婸erona-MalikPDE鐨勬瘮杈冧笅闈㈡槸灏嗚澶勭悊鐨勬柟绋嬪叕寮忥細Perona-MalikPDE銆傚紡涓紝u鏄垜浠骞虫粦鐨勬椂闂村簭鍒楋紝伪鏄帶鍒惰竟缂樹繚鎶ょ殑鍙傛暟锛埼辫秺灏忓搴旇竟缂樹繚鎶よ秺澶氾級銆傜湅璧锋潵鏈夌偣澶嶆潅锛屼笅闈㈢户缁鏄庛€傚綋鎴戜滑灏濊瘯浠ュ師濮嬪舰寮忔眰瑙fPDE鏃讹紝瀹冧細瀵艰嚧涓€浜涢棶棰橈紱鎵€浠ユ垜浠€冭檻涓€绉嶄慨鏀瑰舰寮忥細鍩烘湰涓婏紝鍑芥暟g鍦ㄥ唴閮ㄦ墽琛岄珮鏂嵎绉紙鍗冲彉寰楁洿骞虫粦锛夈€傝繖绉颁负姝e垯鍖栵紝鎴戜滑鍙渶瑕佺煡閬撳畠鏄彲瑙g殑鍗冲彲銆傝繖涓彲鎬曠殑鏂圭▼寮忔瘮涓婇潰鐨勬洿澶嶆潅锛屼絾鏄繖閲屾垜浠病鏈夊涓┖闂寸淮搴︼紝鎴戜滑鍦ㄥ钩婊戜竴涓椂闂村簭鍒楋紝鎵€浠ュ畠鍙湁涓€涓淮搴︺€傛墍浠ラ渶瑕佽В鐨勬柟绋嬫槸锛氳繖鏍风湅璧锋潵绠€鍗曞浜嗭紝鑷冲皯鎴戜滑鐭ラ亾鎵€鏈夌殑瀛楁瘝馃榿锛屼絾鏄鏋滀綘鎯充簡瑙g粏鑺傦紝浣犲彲浠ラ€氳繃瀵逛笂闈㈢殑鍏紡杩涜鎵╁睍鍜岀畝鍖栨潵鎺ㄥ寰楀埌锛岃櫧鐒朵笉寤鸿杩欐牱鍋氾紝浣嗗鏋滀綘鎰挎剰锛岃闅忔剰銆傚垰鎵嶆垜浠彁鍒版垜浠鐞嗙殑鏃堕棿搴忓垪鏄竴缁寸殑锛屼絾鏄负浠€涔堝亸寰垎鏂圭▼鏄簩缁寸殑鍛紵杩欎釜鍋忓井鍒嗘柟绋嬫槸鏍规嵁鏃堕棿姹傝В鐨勩€傚熀鏈笂锛屾瘡涓€姝ラ兘浼氳繘涓€姝ュ钩婊戞暟鎹€傛墍浠瓒婂ぇ锛屾椂闂村簭鍒楄秺骞虫粦锛屼篃灏辨槸璇寸┖闂村彉閲弜浠h〃浜嗘椂闂村簭鍒椾腑鐨勨€滄椂闂粹€濓紝鍚庨潰浼氳缁嗚В閲婅В娉曘€備负浠€涔堣繖涓瓑寮忥紵鐑柟绋嬬殑闂鍦ㄤ簬瀹冧笉鑳藉緢濂藉湴淇濈暀杈圭紭銆備繚鐣欒繖浜涜竟缂樹互鎹曟崏蹇€熺殑浠锋牸澶у彉鍔ㄥ彲鑳芥槸鏄庢櫤鐨勶紝浣嗚鍘婚櫎浠讳綍灏忕殑浣嗛珮棰戠殑鍣煶銆傝繖绉嶆柟娉曟瘮鐑柟绋嬫洿闅撅紝鍥犱负Perona-MalikPDE鏄潪绾挎€х殑锛堜笌绾挎€х殑鐑柟绋嬩笉鍚岋級銆備竴鑸潵璇达紝闈炵嚎鎬ф柟绋嬩笉鍍忕嚎鎬ф柟绋嬮偅鏍峰鏄撴眰瑙c€傚浣曡В鍐宠繖涓亸寰垎鏂圭▼锛屾垜浠皢浣跨敤涓€绉嶇О涓烘湁闄愬樊鍒嗙殑鏂规硶銆傚畠鏄竴绉嶆眰鍋忓井鍒嗭紙鎴栧父寰垎锛夋柟绋嬪拰鏂圭▼鐨勬暟鍊艰В鐨勬柟娉曘€傛偍鍙互灏嗗叾瑙嗕负姣忔閬囧埌涓嬪浘涓殑浜ゅ弶鐐规椂瀵绘壘瑙e喅鏂规锛氫竴涓湪鏃堕棿鍜岀┖闂翠笂鍒嗚鎴愮鏁e尯闂寸殑鍥俱€傝繖閲岀┖闂翠笂鐨勭鏁e尯闂存槸浠嶽0,1]寮€濮嬬殑锛屾椂闂翠笂鐨勭鏁e尯闂存槸浠巘=0鍒皌=sk锛屽叾涓璼鏄垜浠緱鍒扮殑鍖洪棿銆傜嚎鐨勪氦鐐规槸鎴戜滑鎵惧埌鍋忓井鍒嗘柟绋嬭В鐨勫湴鏂广€傚湪澶勭悊鏁板瓧涔嬪墠锛屾垜浠渶瑕佷粠鏁板涓婂畾涔夋暣涓棶棰樸€傜敱浜庢柟绋嬪湪绌洪棿涓婃槸浜岄樁鐨勶紝鍦ㄦ椂闂翠笂鏄竴闃剁殑锛屽洜姝ら渶瑕佷袱涓竟鐣屾潯浠跺拰涓€涓垵濮嬫潯浠讹細鎴戜滑灏嗘眰瑙f柟绋嬬粍浠ュ钩婊戞椂闂村簭鍒楋紙杩欎釜鏂圭▼鐪嬭捣鏉ユ瘮浠g爜澶嶆潅寰楀锛侊級锛屾垜浠殑寮€濮媝oint鏄偂浠锋椂闂村簭鍒楋紝缁堢偣鎬绘槸鐩稿悓鐨勪环鏍笺€傞偅涔堟垜浠浣曞紑濮嬫暟鍊兼眰瑙e憿锛熸垜浠渶鍒濈殑鏂规硶鏄娇鐢ㄨ繖浜涘鏁扮殑鏈夐檺宸垎杩戜技锛屽嵆Perona-MalikPDE涓鏁扮殑杩戜技銆傝繖浜涘鏁扮殑鎺ㄥ涓嶅湪鏈枃璁ㄨ鑼冨洿鍐咃紝灏变笉璇︾粏鍐欎簡銆備笂寮忎腑锛宧鍜宬鍒嗗埆鏄┖闂村拰鏃堕棿涓婄鏁g偣涔嬮棿鐨勮窛绂汇€傝繖閲屽彲浠ヤ娇鐢ㄧ浉鍚岀殑鍏紡璁$畻c鐨勫鏁般€傚湪鎴戜滑鐨勯棶棰樹腑锛岀┖闂翠腑鐨勭鏁g偣鐩搁殧涓€澶╋紝鍥犳h=1銆傚缓璁娇鐢╧<0.1鐨勫€间互淇濇寔鏈夐檺宸垎鍏紡鐨勬煇浜涘噯纭€с€傚洜涓哄鏋渒鐨勫€煎お澶э紝鏈夐檺宸垎鏍煎紡灏变細鍙樺緱涓嶇ǔ瀹氥€傛垜浠幇鍦ㄩ渶瑕佸皢杩欎簺杩戜技鍊兼斁鍏ュ亸寰垎鏂圭▼涓€︹€﹁繖浼氫娇鍏紡鐪嬭捣鏉ユ洿澶嶆潅馃槩杩欐槸鎴戠殑璁$畻浠f暟杞欢鐨勭粨鏋滐細杩欐槸Perona-MalikPDE鐨勭鏁e舰寮忥紝瓒婃潵瓒婂鏉傘€傛湁娌℃湁鏇村ソ鐨勫姙娉曪紵鎴戜滑鍙互鍋锋噿锛屼娇鐢ㄥ井鍒嗙煩闃点€傚洜涓烘椂闂村簭鍒楁槸涓€缁勭鏁g偣锛屾墍浠ュ彲浠ヤ娇鐢ㄧ煩闃靛悜閲忕Н瀵瑰叾杩涜寰垎銆傚鏋滀綘浠ュ墠浠庢湭鍚杩囪繖涓紝杩欓噷鏈変竴浜涗唬鐮佸睍绀轰簡濡備綍浣跨敤鐭╅樀鍚戦噺涔樼Н璁$畻澶氶」寮忕殑绠€鍗曞鏁帮細browser'if__name__=='__main__':n=100#绂绘暎鐐逛釜鏁癮=-4#鍖洪棿璧风偣b=4#鍖洪棿缁堢偣#绂绘暎鐐瑰拰闂磋窛x=np.linspace(a,b,n)h=(b-a)/n#寰垎鍑芥暟锛屽叾瑙f瀽瀵兼暟鐢ㄤ簬鏍¢獙f=10*x**3+x**2fx=30*x**2+2*x#褰㈡垚寰垎鐭╅樀Dx=(np.diag(np.ones(n-1),1)-np.diag(np.ones(n-1),-1))/(2*h)#璁$畻涓婄殑鏁板€煎鏁板彧鏈夊唴閮║x=Dx[1:-1,:]@f#缁樺埗鍥惧舰fig=go.鍥撅紙锛夊浘銆俛dd_trace(go.Scatter(x=x,y=f,name='Function'))fig.add_trace(go.Scatter(x=x,y=fx,name='AnalyitcalDerivative'))fig.add_trace(go.Scatter(x=x[1:-1],y=Ux,name='FiniteDifferenceDerivative',line={'dash':'dash'}))fig.update_layout(yaxis={'鏍囬':'f(x),f_x(x)'},xaxis={'title':'x'},title='FiniteDifferenceDerivativeTest',legend={'x':0,'y':1.075,'orientation':'h'},width=700,height=700,)fig.show()涓婇潰鐨勪唬鐮佸簲璇ヤ骇鐢熶互涓嬭緭鍑猴細涓€闃跺井鍒嗚繎浼煎凡浣跨敤浠ヤ笅浠g爜杞崲涓虹煩闃靛悜閲忎箻绉疍x=(np.diag(np.ones(n-1),1)#u_{r+1,s}terms-np.diag(np.ones(n-1),-1)#u_{r-1,s}terms)/(2*h)#鍙绠楀唴閮ㄧ殑鏁板€煎鏁癠x=Dx[1:-1,:]@f閫氳繃浣跨敤杩欎釜鏈夐檺宸垎鍏紡锛屾垜浠彧鑳藉湪鍐呴儴鐐规壘鍒板鏁般€傚氨鍍忓湪鍩熺殑绗竴涓偣(x=r=0)鏈夎繎浼煎€间竴鏍凤細铏界劧杩欐病鏈夋剰涔夛紝鍥犱负鎵€闇€鐨勮绠楃偣鍦ㄥ煙涔嬪銆備絾杩欏鎴戜滑鏉ヨ涓嶆槸闂鈥斺€斿洜涓烘垜浠彧姹傝В鍐呴儴鐐圭殑鍋忓井鍒嗘柟绋嬶紝鑰岃繖浜涜В鍦ㄧ鐐瑰鏄浐瀹氱殑銆傛垜浠娇鐢ㄤ竴涓畝鍗曠殑灏忕鏁f柟绋嬬粍锛堟瘮濡傛湁5涓鏁g偣锛夛紝涓婇潰鐨勮В閲婂彲鑳芥洿娓呮銆傛渶鍚庝竴涓棶棰橈紝鍗风Н鏄浣曡繘琛岀殑锛熸渶绠€鍗曠殑鏂规硶鏄娇鐢╯cipy.nimage.gaussian_filter锛屼笉杩囨垜杩欓噷閫夋嫨鐨勬柟娉曟槸姹傝В鐑柟绋嬨€傜◢寰湁鐐规暟瀛﹀姛搴曪紝灏卞彲浠ヨ瘉鏄庨珮鏂嵎绉彲浠ユ眰瑙g儹鏂圭▼锛坔ttps://dsp.stackexchange.com...锛夈€傛崲鍙ヨ瘽璇达紝鎴戜滑瑕佽В鍐宠繖涓棶棰樺彲浠ョ敤绂绘暎褰㈠紡琛ㄧず锛屽洜涓洪珮鏂护娉腑鐨勬爣鍑嗗樊锛埾冿級涓庢垜浠眰瑙d笂杩版柟绋嬫墍闇€鐨勨€滄椂闂粹€濋噺鏈夊叧锛屽嵆蟽虏锛埾勶級=2蟿锛屾墍浠ワ紝姹傝В鏃堕棿瓒婇暱锛屾爣鍑嗗樊瓒婂ぇ锛屾椂闂村簭鍒楄秺骞虫粦銆備负浠€涔堣浠ヨ繖绉嶆柟寮忚繘琛屽嵎绉紵PDE鍒板嵎绉殑杩炴帴闈炲父绠€娲侊紒骞朵笖鐢变簬PDE姹傝В閫昏緫鍙互纭紪鐮佷负寰幆锛屽皢鍏跺寘瑁呭湪@numba.jit瑁呴グ鍣ㄤ腑鍙互鎻愰珮璁$畻鏁堢巼銆侾ython瀹炵幇鐜板湪鎴戜滑宸茬粡瀹屾垚浜嗘暟瀛︽柟闈㈢殑鑹拌嫤宸ヤ綔锛岀紪鐮佸彉寰楅潪甯哥畝鍗曪紒鍗风Н鐨勫疄鐜板涓嬶細importnumpyasnpdefconvolve_PDE(U:np.array,sigma:float=1,k:float=0.05)->np.array:'''閫氳繃姹傝В鐑柟绋嬭繘琛岄珮鏂嵎绉叿鏈塏eumann杈圭晫鏉′欢鍙傛暟----------U:np.array瑕佸鍏舵墽琛屽嵎绉殑鏁扮粍銆俿igma:float,optional楂樻柉鍗风Н鐨勬爣鍑嗗樊銆俴:float,optional鏈夐檺宸垎鏂规鐨勬闀匡紙淇濇寔<0.1浠ヤ繚璇佸噯纭€э級杩斿洖------U:np.array鍗风Н鍑芥暟'''t=0t_end=sigma**2/2whiletTuple[np.array,np.array]:'''寰楀埌涓€闃跺拰浜岄樁寰垎鐭╅樀锛屽皢鍏舵埅鏂互姹傚鍐呯偣鐨勫鏁般€傚弬鏁?---------n:int绂绘暎鐐规€绘暟杩斿洖------[Dx,Dxx]:np.array鍒嗗埆涓轰竴闃跺拰浜岄樁寰垎鐭╅樀銆?''Dx=(np.diag(np.ones(n-1),1)-np.diag(np.ones(n-1),-1))/2Dxx=(np.diag(np.ones(n-1),1)-2*np.diag(np.ones(n),0)+np.diag(np.ones(n-1),-1))#鎴柇鐭╅樀浠ヤ究鎴戜滑鍙‘瀹?鍐呴儴鐐逛笂鐨勫鏁帮紙鍗虫垜浠笉璁$畻杈圭晫涓婄殑瀵兼暟锛塺eturnDx[1:-1,:],Dxx[1:-1,:]defperona_malik_smooth(p:np.array,alpha:float=10.0,k:float=0.05,t_end:float=5.0)->np.array:'''浣跨敤鍩烘湰鐨勬湁闄愬樊鍒嗘柟妗堟眰瑙i珮鏂嵎绉疨erona-MalikPDE銆傚弬鏁?---------p:np.array瑕佸钩婊戠殑浠锋牸鏁扮粍銆俛lpha锛歠loat锛屽彲閫変竴涓弬鏁版潵鎺у埗PDE涓庣儹鏂圭▼鐨勭浉浼肩▼搴︼紝peronamalikPDE->heatequationasalpha->infinityk锛歠loat锛屽彲閫夋椂闂存闀匡紙淇濇寔<0.1浠ョ‘淇濆噯纭€э級t_end锛歠loat,optional浣曟椂缁堟绠楁硶t_end瓒婂ぇ锛屽簭鍒楄秺骞虫粦0])U=deepcopy(p)t=0whiletnp.array:'''浣跨敤a姹傝В鐑柟绋嬪熀鏈殑鏈夐檺宸垎鏂规硶銆傚弬鏁?---------p:np.array瑕佸钩婊戠殑浠锋牸鏁扮粍銆俴:float,optional鏃堕棿姝ラ暱锛堜繚鎸?0.1浠ヤ繚璇佺簿搴︼級t_end:float,optional缁堟绠楁硶鏃秚_end瓒婂ぇ锛屽簭鍒楄秺骞虫粦杩斿洖------U:np.array鐑噺equationsmoothedtimeseries'''#鑾峰彇寰垎鐭╅樀_,Dxx=get_diff_mat(p.shape[0])U=deepcopy(p)t=0whilet