1
我試圖在R中找到一個函數,該函數可以平滑一個2D矩陣,該矩陣已根據長度在矩陣周圍填充零的窗戶。如果窗口大小爲3,那麼我們從頂部,底部,右側和左側通過3個零,然後我們進行平均來平滑它。我在SO和其他教程中找到了rollmean,但它並不完全符合我的要求。我需要(如果窗口大小爲3),我們考慮一個3 * 3的窗口並取平均值,並將其替換爲當前窗口的當前元素,然後將窗口向右移動一個單位(像素)。例如,當我們到達最右端時,我們從最左邊角落一個單位開始開窗。 這就是我不想要的rollmean。我想要保留所有9個元素。使用rollmean,filter,rollapply或其他R工具通過移動平均滑動窗口方法平滑2D矩陣
> xm<-matrix(c(1,2,3,4,5,6,7,8,9),ncol=3)
> xm
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> rollmean(xm,3)
[,1] [,2] [,3]
[1,] 2 5 8
因此,這裏的填充功能,如上文所述:
mat.pad<-function(X,k){
dims<-dim(X)
n<-dims[1]
m<-dims[2]
pad.X <- matrix(0, n + 2 * k, m + 2 * k)
pad.X[(k + 1):(n + k), (k + 1):(m + k)] <- X
return(pad.X)
}
所以,想象一下,這是我的X:
> X
[,1] [,2] [,3]
[1,] 0.5 0.3 0.2
[2,] 0.5 0.4 0.1
[3,] 0.4 0.4 0.3
[4,] 0.4 0.3 0.3
[5,] 0.3 0.2 0.2
[6,] 0.5 0.2 0.2
[7,] 0.5 0.4 0.1
[8,] 0.4 0.4 0.5
[9,] 0.3 0.3 0.5
,這裏是填充的版本,其中k = 3(窗口= 3 * 3)
> mat.pad(X,3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 0 0 0 0.0 0.0 0.0 0 0 0
[2,] 0 0 0 0.0 0.0 0.0 0 0 0
[3,] 0 0 0 0.0 0.0 0.0 0 0 0
[4,] 0 0 0 0.5 0.3 0.2 0 0 0
[5,] 0 0 0 0.5 0.4 0.1 0 0 0
[6,] 0 0 0 0.4 0.4 0.3 0 0 0
[7,] 0 0 0 0.4 0.3 0.3 0 0 0
[8,] 0 0 0 0.3 0.2 0.2 0 0 0
[9,] 0 0 0 0.5 0.2 0.2 0 0 0
[10,] 0 0 0 0.5 0.4 0.1 0 0 0
[11,] 0 0 0 0.4 0.4 0.5 0 0 0
[12,] 0 0 0 0.3 0.3 0.5 0 0 0
[13,] 0 0 0 0.0 0.0 0.0 0 0 0
[14,] 0 0 0 0.0 0.0 0.0 0 0 0
[15,] 0 0 0 0.0 0.0 0.0 0 0 0
如何滑動平均窗口?
你得到它的工作莫娜? –