一個很好的平滑功能是kernel convolution。它的作用是將移動窗口中的一個小陣列放大到更大的陣列上
假設您選擇了1/3 * [1,1,1]
的標準平滑內核並將其應用於數組(內核需要進行奇數和標準化)。讓我們把它應用到[1,2,2,7,3,4,9,4,5,6]
:
核心的開頭的中心是在第一個2
。然後它平均自己和鄰居,然後繼續前進。結果如下: [1.67, 3.67, 4.0, 4.67, 5.33, 5.67, 6.0, 5.0]
請注意,該數組缺少第一個和最後一個元素。
你可以用numpy.convolve做到這一點,例如:
import numpy as np
a = np.array([[1,2,2,7,3,4,9,4,5,6]])
k = np.array([1,1,1])/3
smoothed = np.convolve(x, k, 'valid')
這樣做的結果是,你的核心價值是平滑與鄰國的值。你可以通過增加捲積核來改變卷積核,例如[1,1,1,1,1]/5
,或者給它一個高斯,這會使中心成員比外部壓力更大。閱讀維基百科文章。
編輯
這工作的問題問的得到一個數據塊平均:
import numpy as np
a = [1,2,3,4,5,6,7,8,9,10]
size = 3
new_a = []
i = 0
while i < len(a):
val = np.mean(a[i:i+3])
new_a.append(val)
i+=size
print(new_a)
[2.0, 5.0, 8.0, 10.0]
來平滑一個嘈雜的圖案,則更有可能要滾動平均值(即,平均元件0-2,然後1-3,然後2-4,等,因此平均值重疊)。熊貓圖書館有這樣的功能內置。 – BrenBarn
是的,謝謝你,滾動平均值給我一個很好的結果。儘管如此,我也很想知道第一個答案! – martianwars