我有两个矩阵,即矩阵A和矩阵B
矩阵A:
.project
矩阵B:
[,1][,2]
[1,] 1 1
[2,] 1 2
[3,] 2 1
[4,] 2 2
[5,] 10 1
[6,] 10 2
[7,] 11 1
[8,] 11 2
[9,] 5 5
[10,] 5 6
对于矩阵A中的每一行,我计算矩阵B中每两列的欧氏距离。
例如,要在结果矩阵中获得以下答案:
[,1][,2][,3][,4][,5][,6]
[1,] 2 1 5 5 10 1
计算结果如下:
[,1]
[1,]
要在结果矩阵中得到以下答案:
A(1,1) - From Matrix A
B(2,1) - From Matrix B
= sqrt((xA -xB)^2 + (yA -yB)^2)
= sqrt((1-2)^2 + (1-1)^2)
= 1.00
xA and yA from Matrix A
xB and yB from Matrix B
计算结果如下:
[,2]
[1,] 5.66
要在结果矩阵中得到以下答案:
A(1,1) - From Matrix A
B(5,5) - From Matrix B
= sqrt((xA -xB)^2 + (yA -yB)^2)
= sqrt((1-5)^2 + (1-5)^2)
= 5.66
计算结果如下:
[,3]
[1,] 9.00
在我拥有所有距离之后,我将它存储在距离矩阵中,如下所示:
A(1,1) - From Matrix A
B(10,1) - From Matrix B
= sqrt((xA -xB)^2 + (yA -yB)^2)
= sqrt((1-10)^2 + (1-1)^2)
= 9.00
然后我根据每行的最小距离进行分组,以了解每行是否属于第1,2或3组。共有3组。例如,如果我得到以下组,如何恢复矩阵A的数据点?
Distance matrix (the answer for the euclidean distance):
[1,] [,2] [,3]
[1,] 1.00 5.66 9.00
[2,] 1.00 1.41
[3,]
[4,]
[5,]
[7,]
[8,]
[9,]
[10]
例如前四行属于组1,第五点属于组3,依此类推。但是如果我重新安排答案并将所有组1组合在一起,组2组合在一起组3组,则矩阵A的位置将发生变化。那么我怎样才能正确地从矩阵A中找回这一点呢?
答案 0 :(得分:1)
我不确定您的预期输出是什么,但以下两个选项中的一个可能会有所帮助吗?
# sample data
A = as.matrix(read.table(text="1 1
1 2
2 1
2 2
10 1
10 2
11 1
11 2
5 5
5 6 ",header=F))
B = c(2, 1, 5, 5, 10, 1)
B = matrix(B,3,byrow = T)
# compute minimum distance
distancematrix = t(apply(A, 1,function(y) {apply(B,1,function(x) {dist(rbind(x,y))})}))
# option 1
A_df = as.data.frame(A)
A_df$group = apply(distancematrix,1,which.min)
A_df[order(A_df$group),]
# option 2
split(as.data.frame(A),apply(distancematrix,1,which.min))
输出选项1:
V1 V2 group
1 1 1 1
2 1 2 1
3 2 1 1
4 2 2 1
9 5 5 2
10 5 6 2
5 10 1 3
6 10 2 3
7 11 1 3
8 11 2 3
输出选项2:
$`1`
V1 V2
1 1 1
2 1 2
3 2 1
4 2 2
$`2`
V1 V2
9 5 5
10 5 6
$`3`
V1 V2
5 10 1
6 10 2
7 11 1
8 11 2