Сделать матрицу расстояний для кластеризации - PullRequest
0 голосов
/ 31 марта 2020

У меня есть матрица точек, которые я хотел бы кластеризовать вручную (без функций).

> X=matrix(c( 9,  7,  1,  8,  1,  5,  6,1,  7,  9,  1,  7,  5,  4),  nrow=2,   ncol=7, byrow = TRUE)
> print(X)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    9    7    1    8    1    5    6
[2,]    1    7    9    1    7    5    4

Для этого я бы хотел вычислить матрицу расстояний между каждой парой точек в X, итоговая матрица должна выглядеть так:

distances=matrix(c(0,  6.32,  11.3,     1,    10,  5.66,  4.24,
               6.32,     0,  6.32,  6.08,     6,  2.83,  3.16,
               11.3,  6.32,     0,  10.6,     2,  5.66,  7.07,
               1,  6.08,  10.6,     0,  9.22,     5,  3.61,
               10,     6,     2,  9.22,     0,  4.47,  5.83,
               5.66,  2.83,  5.66,     5,  4.47,     0,  1.41,
               4.24,  3.16,  7.07,  3.61,  5.83,  1.41,     0),nrow=7,   ncol=7, byrow = TRUE)

Как рассчитать это матрица расстояний? Использование функции dist() не работает.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

dist(t(X), diag = TRUE, upper=TRUE) даст вам желаемый результат.

1 голос
/ 31 марта 2020

Мы можем использовать функцию dist.

dist(t(X))
#             1            2            3            4            5            6
#2  6.324555320                                                                 
#3 11.313708499  6.324555320                                                    
#4  1.000000000  6.082762530 10.630145813                                       
#5 10.000000000  6.000000000  2.000000000  9.219544457                          
#6  5.656854249  2.828427125  5.656854249  5.000000000  4.472135955             
#7  4.242640687  3.162277660  7.071067812  3.605551275  5.830951895  1.414213562

Если вы действительно хотите диагональ и верхний треугольник, вы можете иметь их тоже.

dist(t(X),diag=TRUE, upper = TRUE)
#             1            2            3            4            5            6            7
#1  0.000000000  6.324555320 11.313708499  1.000000000 10.000000000  5.656854249  4.242640687
#2  6.324555320  0.000000000  6.324555320  6.082762530  6.000000000  2.828427125  3.162277660
#3 11.313708499  6.324555320  0.000000000 10.630145813  2.000000000  5.656854249  7.071067812
#4  1.000000000  6.082762530 10.630145813  0.000000000  9.219544457  5.000000000  3.605551275
#5 10.000000000  6.000000000  2.000000000  9.219544457  0.000000000  4.472135955  5.830951895
#6  5.656854249  2.828427125  5.656854249  5.000000000  4.472135955  0.000000000  1.414213562
#7  4.242640687  3.162277660  7.071067812  3.605551275  5.830951895  1.414213562  0.000000000
...