制作距离矩阵进行聚类

时间:2020-03-31 01:30:42

标签: r matrix hierarchical-clustering

我有一个要手动聚集的点矩阵(无功能)。

> 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 个答案:

答案 0 :(得分:1)

我们可以使用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

答案 1 :(得分:1)

dist(t(X), diag = TRUE, upper=TRUE)将为您带来理想的结果。