【发布时间】:2018-01-07 10:59:58
【问题描述】:
我有两个矩阵,矩阵 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
获得所有距离后,我将其存储在一个距离矩阵中:
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 个组。例如,如果我得到以下组,如何恢复来自矩阵 A 的数据点?
> groupings <- apply(distanceMatrix, 1, which.min)
> [1] 1 1 1 1 3 2 3 2 1 1
例如前四行属于第 1 组,第 5 行属于第 3 组,依此类推。但是如果我重新排列答案并将所有第 1 组、第 2 组和第 3 组组合在一起,矩阵 A 的位置就会改变。那么我怎样才能正确地从矩阵 A 中取回点呢?
【问题讨论】:
-
您的解释很清楚,直到您真正提出问题。你期望的输出是什么?
-
是的,应该是一样的。但是,如果我将所有第 1 组、第 2 组和第 3 组组合在一起,矩阵 A 中数据点的位置也会发生变化,那么如果顺序已更改,我如何知道矩阵 A 的确切数据点。跨度>
-
也许您可以使用
names(groupings) <- seq(1, length(groupings))以便名称表示矩阵A中的行号