2017-12-24 11 views
1

初期隣接に基づく確率行列を作成します。適切な確率行列を作成するためにループする。どのように隣接関係をうまく組み込むかについてのアイデア?は、これは私の究極の目標を示し

spatialMatrix <- matrix(data = 1:20, ncol = 5, nrow = 4, byrow = T) 
emptyMatrix <- matrix(data = 101, ncol = 4, nrow = 5) 

lets <- which(spatialMatrix == 12, arr.ind = TRUE, useNames = F) 
for (i in seq_along(1:as.numeric(ncol(emptyMatrix)-lets[,2]))) { 
    for (j in seq_along(1:as.numeric(nrow(emptyMatrix)-lets[,1]))) { 
    emptyMatrix[lets[,1], lets[,2]] <- 0 
    emptyMatrix[lets[,1], lets[,2]+i] <- 0.4 
    emptyMatrix[lets[,1], lets[,2]-i] <- 0.4 
    # diagonals 
    emptyMatrix[lets[,1]+j, lets[,2]+i] <- 0.4 
    emptyMatrix[lets[,1]-j, lets[,2]+i] <- 0.4 
    emptyMatrix[lets[,1]+j, lets[,2]-i] <- 0.4 
    emptyMatrix[lets[,1]-j, lets[,2]-i] <- 0.4 

    emptyMatrix[lets[,1]+j, lets[,2]] <- 0.4 
    emptyMatrix[lets[,1]-j, lets[,2]] <- 0.4 
    } 
+0

空間行列から得られる確率はどのくらいですか? –

+0

こんにちはJohn、この例では、私は任意に値を割り当てていますが、それらは分布からではありません。 直接隣接(+1要素から最初の要素から離れている)の値は0.4、+2近隣は0.1の値、+3近隣は0.05の値を持ちます。 –

+0

出発点はどこですか?それぞれがもう一方に直接隣接するからです。 – Onyambu

答えて

0

これは、基地Rの関数である:

sm <- matrix(data = 1:20, ncol = 5, nrow = 4, byrow = T) 
fun <- function(z)sapply(z,function(x)ifelse(x==0,0,switch(x,0.4,0.1,0.05))) 
apply(pmax(abs(row(sm)-3),abs(col(sm)-2)),2,fun) 
     [,1] [,2] [,3] [,4] [,5] 
[1,] 0.1 0.1 0.1 0.1 0.05 
[2,] 0.4 0.4 0.4 0.1 0.05 
[3,] 0.4 0.0 0.4 0.1 0.05 
[4,] 0.4 0.4 0.4 0.1 0.05 

ホープこの を助ける:私はまた、[3,2]このように行から3を減算した後、カラムから2を差し引く要素を選択しますでも、上記のfun機能を書くのよりコンパクトな方法は次のようになります。

fun <- function(z)sapply(as.character(z),switch,'0'=0,'1'=0.4,'2'=0.1,'3'=0.05) 

このコードは、与えられた空間マトリックスからそれを行と列の行列を作成し、最大値をとる2つを比較し、得られた最大値に応じて確率を割り当てます。

関連する問題