我有两个矩阵,即矩阵A和矩阵B
矩阵A:
[,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 矩阵B:
[,1][,2][,3][,4][,5][,6]
[1,] 2 1 5 5 10 1对于矩阵A中的每一行,我计算到矩阵B中每两列的欧几里得距离。
例如,要在结果矩阵中获得以下结果的答案:
[,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在我得到所有的距离后,我将其存储在一个距离矩阵中,如每个bleow:
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,2或3。有3个组所有together.For示例如果我得到以下组,如何从矩阵A恢复数据点?
> groupings <- apply(distanceMatrix, 1, which.min)
> [1] 1 1 1 1 3 2 3 2 1 1 例如,前四行属于组1,第五个点属于组3,依此类推。但如果我重新排列答案,并将所有组1分组在一起,将组2分组在一起,将组3分组在一起,矩阵A的位置将改变。那么,我如何才能从矩阵A中正确地取回点呢?
发布于 2018-01-07 19:34:25
我不太确定您的预期输出是什么,但也许以下两个选项中的一个可以帮助您?
# 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 2https://stackoverflow.com/questions/48136466
复制相似问题