r - 为聚类制作距离矩阵
问题描述
我有一个我想手动聚类的点矩阵(没有函数)。
> 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()
功能似乎不起作用。
解决方案
我们可以使用该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