2017-01-19 5 views
1

anwenden würde ich eine Funktion auf jedes Element einer Matrix wie gelte unter Berücksichtigung der oben, unten, links und Zellen rechts benachbarten: esWie eine Funktion auf jedes Element der Matrix unter Berücksichtigung der benachbarten Zellen

a=1; b=3; c=8; d=2 

m <- matrix(1:20, nrow=4, ncol=5) 
mn <- matrix(NA, nrow=4, ncol=5) 

for(i in 2:3){ 
    for(j in 2:4){ 
    mn[i,j] <- a*m[i-1,j]+b*m[i+1,j]+c*m[i,j-1]+d*m[i,j+1] 
    } 
} 

Ist eine Alternative mit Sapply oder etwas anderes?

+0

eine geringfügige Vereinfachung: 'a <- c (1, 3, 8, 2)' an der Spitze. Dann wird in der Schleife 'mn [i, j] <- sum (c (m [i-1, j], m [i + 1, j], m [i, j-1], m [i, j + 1]) * a) '. – lmo

Antwort

0

Sie können mehrere Zeilen und Spalten einer Matrix Teilmenge, wie folgt aus:

.i = 2:3 
.j = 2:4 

mn[.i,.j] = a*m[.i-1,.j] + b*m[.i+1,.j] + c*m[.i,.j-1] + d*m[.i,.j+1] 


> mn 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] NA NA NA NA NA 
# [2,] NA 62 118 174 NA 
# [3,] NA 76 132 188 NA 
# [4,] NA NA NA NA NA 
Verwandte Themen