R中两个不等维矩阵的两两计算
当矩阵A和矩阵B的维数不相等时,如何计算它们在R中的欧氏距离,如下所示: 我有两个矩阵,矩阵A和矩阵B 矩阵A:R中两个不等维矩阵的两两计算,r,R,当矩阵A和矩阵B的维数不相等时,如何计算它们在R中的欧氏距离,如下所示: 我有两个矩阵,矩阵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]
[,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
[2,] 1 1 2 1 10 1
[3,] 5 5 5 6 11 2
[4,] 2 2 5 5 10 1
[5,] 2 1 5 6 5 5
[6,] 2 2 5 5 11 1
[7,] 2 1 5 5 10 1
[8,] 1 1 5 6 11 1
[9,] 2 1 5 5 10 1
[10,] 5 6 11 1 10 2
I want the Result matrix for List 1 to store result of
the euclidean distance between row 1 to row 10 in matrix A and every two
columns of row 1 in Matrix B as per below:
List [[1]]
[1,] [,2] [,3]
[1,] 1.00 5.66 9.00
[2,] 0.00 1.00 9.00
[3,] 5.66 6.40 10.05
[4,]
[5,]
[7,]
[8,]
[9,]
[10]
For List 2, I want the Result matrix to store the result of the euclidean
distance between row 1 to row 10 in matrix A and every two columns of row 2
in Matrix B as per below:
List [[2]]
[1,] [,2] [,3]
[1,] 1.41 5.00 9.06
[2,] 1.00 1.41 8.00
[3,]
[4,]
[5,]
[7,]
[8,]
[9,]
[10]
接下来,列表3是矩阵B中的第3行
这应该一直持续到清单10
例如,要在结果矩阵列表1中获得以下内容的答案:
[,1]
[1,] 1.00
计算结果如下:
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
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
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
要获得以下问题的答案:
[,2]
[1,] 5.66
[,3]
[1,] 9.00
计算结果如下:
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
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
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
要获得以下问题的答案:
[,2]
[1,] 5.66
[,3]
[1,] 9.00
计算结果如下:
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
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
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
这是我目前拥有的,但它在矩阵A的第一行之间进行计算
矩阵B中的第1行,依此类推。我想要的是列表1中矩阵A中的每一行到矩阵B中的第一行,矩阵A中的每一行到矩阵B中的第二行,依此类推,直到矩阵B中的第10行
ObjCentDist <- function(matrixA, matrixB) {
resultMatrix <- matrix(NA, nrow=dim(matrixA)[1],ncol=dim(matrixB[2]/2)
for(i in 1:nrow(matrixA)) {
for(j in 1:((dim(matrixB)[2])/2)) {
k = (j * 2) - 1
resultMatrix[i,j] <- sqrt(rowSums((t(matrixA[i,])matrixB[i,k:k+1)])^2))
}
}
resultMatrix
}
matrixA <- matrix(c(1,1,1,2,2,1,2,2,10,1,10,2,11,1,11,2,5,5,5,6), ncol = 2, byrow = TRUE)
matrixB <- matrix(c(2,1,5,5,10,1,1,1,2,1,10,1,5,5,5,6,11,2,2,2,5,5,10,1,2,1,5,6,5,5,2,2,5,5,11,1,2,1,5,5,10,1,1,1,5,6,11,1,2,1,5,5,10,1,5,6,11,1,10,2), nrow=10, ncol=6, byrow=TRUE)
ObjCentDist此解决方案需要两个不同的apply语句,因此从功能角度来看,它可能不是最好的,但它应该提供您想要的结果。(编辑以简化代码)
#获取从A到B中所有对的欧几里德距离
alldist此解决方案需要两个不同的apply语句,因此从功能角度来看,它可能不是最好的,但它应该给出您想要的结果。(编辑以简化代码)
#获取从A到B中所有对的欧几里德距离
alldist您可以添加生成您列出的两个矩阵的代码吗?您好,我已经编辑了问题以包含生成上述精确矩阵的代码。您可以添加生成您列出的两个矩阵的代码吗?您好,我已经编辑了问题以包含生成上述精确矩阵的代码