第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何去除數(shù)據(jù)中的移動(dòng)平均線?

如何去除數(shù)據(jù)中的移動(dòng)平均線?

UYOU 2023-03-22 10:43:52
我有數(shù)據(jù) y = [-10.5, -2.0, 5.0, -3.0, 4.0, 9.5, 18.0, 14.5, 11.0, 13.5, 25.0, 21.5, 7.5, 5.5, 3.5, 10.5, 7.0, 3.5, 1.5, 16.0, 20.0, 22.5, 20.5, 33.5, 27.0, 38.5, 29.0, 27.0, 28.0, 24.5, 24.0, 29.5, 39.5]我想擺脫垂直移動(dòng)平均線趨勢(shì)(只獲得圍繞恒定平均值的差異)。在這種情況下,我應(yīng)該得到類似的東西:[-7, -2, 2, -4, 0, 3, 8, 5, 2, 3, 10, 7, -3, -5, -7, -3, - 6, -9, -11, -2, 0, 1, -1, 7, 2, 9, 2, 0, 0, -3, -4, -1, 5]輸入 輸出我的想法是在Input上擬合一條線(線性回歸),得到類似 ax + b 的東西并僅刪除 ax 以近似所需的Output。有沒有更標(biāo)準(zhǔn)的數(shù)學(xué)方法來解決我的問題?(最好用 Python 實(shí)現(xiàn))。另外,我認(rèn)為Output和 mean( Output )的不同值之間的一些差異可能被錯(cuò)誤地視為直線斜率的一部分,因此,線性回歸可能會(huì)給我一個(gè) a'x + b',其中 a' 關(guān)閉但不同于 a. 我怎樣才能緩解這個(gè)問題?
查看完整描述

2 回答

?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊

考慮到瘋狂的 FFT 優(yōu)化,我認(rèn)為 1D 卷積會(huì)很快完成你想要的事情:


import numpy as np

from scipy.signal import convolve


window_size = 10

y = np.array([-10.5, -2.0, 5.0, -3.0, 4.0, 9.5, 18.0, 14.5, 11.0, 13.5, 25.0, 21.5, 7.5, 5.5, 3.5, 10.5, 7.0, 3.5, 1.5, 16.0, 20.0, 22.5, 20.5, 33.5, 27.0, 38.5, 29.0, 27.0, 28.0, 24.5, 24.0, 29.5, 39.5])

# Pad with zeros for entries before/after the window size

y_rolling_mean = convolve(y, np.ones(window_size)/window_size, 'same')

y_without_mean = y - y_rolling_mean

請(qǐng)記住,這通常會(huì)為第一個(gè)和最后一個(gè) window_size//2 條目產(chǎn)生不準(zhǔn)確的值,因?yàn)樗鼈兊臐L動(dòng)平均值是使用零填充計(jì)算的,但是您可以通過在卷積之前填充您想要的值來更改此行為。


更新:添加了一個(gè)圖來與第二個(gè)答案進(jìn)行比較

http://img1.sycdn.imooc.com//641a6b890001d4d506460479.jpg

卷積如何找到滾動(dòng)平均值?

本質(zhì)上,一維卷積可以被認(rèn)為是兩個(gè)數(shù)組的點(diǎn)積,因?yàn)橐粋€(gè)數(shù)組“滑動(dòng)”到另一個(gè)數(shù)組(實(shí)際上,相關(guān)性在技術(shù)上對(duì)于這種情況是正確的,但我現(xiàn)在不會(huì)深入討論)。為了獲得更好的想法,請(qǐng)考慮以下場(chǎng)景:


y = 1 2 3 4 5 6

x = 1 1 1

c = <convolution of y and x>

卷積數(shù)組的每個(gè)輸出索引都是“x”與其相同長(zhǎng)度窗口與 y 的點(diǎn)積。所以


c[0] = sum(y[0:3]*x)

c[1] = sum(y[1:4]*x)

c[2] = sum(y[2:5]*x)

...

現(xiàn)在,考慮 N 個(gè)數(shù)字的平均值就是 sum(numbers)/N 這一事實(shí)?;蛘撸?/p>


mean = sum(1/N * number)

結(jié)合我們?cè)谏厦鎸W(xué)到的關(guān)于卷積的知識(shí),讓 x = 1/len(x) 的每個(gè)元素:


y =  1    2    3   4  5   6

x = 1/3  1/3  1/3

c[0] = 1/3*y[0] + 1/3*y[1] + 1/3*y[2] = mean(y[0:3])

c[1] = 1/3*y[1] + 1/3*y[2] + 1/3*y[3] = mean(y[1:4]

...

整潔的!與特殊形式的 x 向量卷積的副作用是該范圍的平均值!因此,通過將 x 選擇為 be,np.ones(window_size)/window_size您可以保證卷積將在 上產(chǎn)生滾動(dòng)平均值y。


當(dāng)圖像中存在大量不需要的高頻噪聲時(shí),這在圖像處理中大量使用:

http://img1.sycdn.imooc.com//641a6ba30001584e15800397.jpg

請(qǐng)注意,與您的一維數(shù)據(jù)類似,噪聲圖像中的尖銳“峰”和斑點(diǎn)被“舍入”了。

為什么窗口大小為 10?

老實(shí)說,我隨機(jī)選擇了窗口大小。實(shí)際上,這在很大程度上取決于您期望數(shù)據(jù)的噪聲程度以及您希望輸出看起來有多“平滑”。窗口大小越大,輸出看起來越平坦。根據(jù)提供的玩具編號(hào),似乎有一個(gè) 10 的窗口可以在y不破壞信號(hào)的情況下壓平足夠的尖峰。


查看完整回答
反對(duì) 回復(fù) 2023-03-22
?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

正如您在問題中提到的線性擬合的想法,我會(huì)尋求簡(jiǎn)單但相當(dāng)穩(wěn)健的解決方案,即擬合最佳線并簡(jiǎn)單地從數(shù)據(jù)中減去它以獲得去趨勢(shì)跟蹤:


import numpy as np

import matplotlib.pyplot as plt


x = np.arange(len(y)) 

coefs = np.polyfit(x, y, 1)

line = coefs[1] + x*coefs[0]

detrended = y-line

fig, ax = plt.subplots(1)

ax.plot(y)

ax.plot(line)

ax.plot(detrended)

http://img1.sycdn.imooc.com//641a6bb500017a4f05630430.jpg

查看完整回答
反對(duì) 回復(fù) 2023-03-22
  • 2 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)