1

Rの質問があります。これを行うアルゴリズムを念頭に置いていますが、次のことを行うためのより適切な方法があるかどうか疑問に思っていました:

次のマトリックスがあるとします。

        [,1] [,2] [,3] [,4] [,5]
[A,]    0    0    0    0    1
[B,]    0    0    0    1    1
[C,]    0    0    1    1    1
[D,]    0    0    1    1    0
[E,]    1    0    0    0    0
[F,]    1    1    1    0    0

ここで、各行と別の行との差の別のマトリックス (つまり、距離のマトリックス) を次のように作成したいと考えています (半分は塗りつぶされていますが、上部を取得するためのミラーにすぎません)。

       [,A] [,B] [,C] [,D] [,E] [,F]
[A,]    0     
[B,]    1    0     
[C,]    2    1    0     
[D,]    3    2    1    0    
[E,]    2    3    4    3    0
[F,]    4    5    4    3    2    0

私の方法は、各行の列を下の行の対応する列と比較するループを使用することですが、大きな行列では効率的ではありません。これをより良くする方法についてのアイデアはありますか?

どうも

4

1 に答える 1

2

distメソッドを使用してコメントで述べたようにmanhattan

dt <- read.table(text='     [,1] [,2] [,3] [,4] [,5]
[A,]    0    0    0    0    1
[B,]    0    0    0    1    1
[C,]    0    0    1    1    1
[D,]    0    0    1    1    0
[E,]    1    0    0    0    0
[F,]    1    1    1    0    0')

mm <- as.matrix(dt)
dist(mm,method='manhattan' ,diag=TRUE)

      [A,] [B,] [C,] [D,] [E,] [F,]
[A,]    0                         
[B,]    1    0                    
[C,]    2    1    0               
[D,]    3    2    1    0          
[E,]    2    3    4    3    0     
[F,]    4    5    4    3    2    0
于 2013-09-23T19:36:58.677 に答える