如何计算两个维数不等的矩阵之间R中的欧氏距离

如何计算两个维数不等的矩阵之间R中的欧氏距离,r,euclidean-distance,R,Euclidean Distance,如何计算矩阵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][,3][,4][,

如何计算矩阵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][,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 (euclidean distance) to be as per below:

        [1,]  [,2]  [,3]

    [1,] 1.00  5.66  9.00
    [2,] 1.00  1.41
    [3,]
    [4,]
    [5,]
    [7,]
    [8,]
    [9,]
    [10]
对于矩阵A中的每一行,计算到每一行矩阵B中每两列的欧氏距离

例如,要在结果矩阵中获得以下各项的答案:

        [,1]
    [1,] 
        [,2]
    [1,] 5.66
        [,3]
    [1,] 9.00
for(i in 1:nrow(matA)) 
{
  resultMatrix[i,1] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,1:2])^2))
  resultMatrix[i,2] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,3:4])^2))
  resultMatrix[i,3] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,5:6])^2))

}
计算结果如下:

    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
要在结果矩阵中获得以下问题的答案:

        [,1]
    [1,] 
        [,2]
    [1,] 5.66
        [,3]
    [1,] 9.00
for(i in 1:nrow(matA)) 
{
  resultMatrix[i,1] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,1:2])^2))
  resultMatrix[i,2] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,3:4])^2))
  resultMatrix[i,3] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,5:6])^2))

}
计算结果如下:

    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
要在结果矩阵中获得以下问题的答案:

        [,1]
    [1,] 
        [,2]
    [1,] 5.66
        [,3]
    [1,] 9.00
for(i in 1:nrow(matA)) 
{
  resultMatrix[i,1] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,1:2])^2))
  resultMatrix[i,2] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,3:4])^2))
  resultMatrix[i,3] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,5:6])^2))

}
计算结果如下:

    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的尺寸相等时有效:

    distance <- function(MatrixA, MatrixB) {
      resultMatrix <- matrix(NA, nrow=dim(MatrixA)[1], ncol=dim(MatrixB)[1])
      for(i in 1:nrow(MatrixB)) {
         resultMatrix[,i] <- sqrt(rowSums(t(t(MatrixA)-MatrixB[i,])^2))
      }
         resultMatrix
      }

distance您只需要更改for循环,因此它会计算结果矩阵中每一行的所有三列:

        [,1]
    [1,] 
        [,2]
    [1,] 5.66
        [,3]
    [1,] 9.00
for(i in 1:nrow(matA)) 
{
  resultMatrix[i,1] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,1:2])^2))
  resultMatrix[i,2] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,3:4])^2))
  resultMatrix[i,3] <- sqrt(rowSums((t(MatrixA[i,])-MatrixB[i,5:6])^2))

}
for(1中的i:nrow(matA))
{

resultMatrix[i,1]您是否要求正确的方法(在伪代码中)或者完整的代码本身?理想情况下,你应该在方法上寻求帮助,尝试编码,然后要求更正。如果你愿意,我可以在方法上提供帮助。Hi@BrishnaBatool我有代码,但它只在矩阵a和B的维度相同时才起作用。我将编辑我的问题并插入代码。现在是的,我很乐意e了解您的方法。非常感谢您的帮助!您好,这提供了正确的解决方案,非常感谢。如果列数非常大,如果结果矩阵有非常多的列,您对如何简化for循环有什么其他建议吗?我如何调整这部分代码,以便能够自动使用代码ncol=dim(MatrixB)[1]从逻辑上获取列数,而不是三个ssstatement,您可以添加一个嵌套for循环,该循环将迭代MatrixB中的列数的一半,并且在每次迭代中,执行'resultMatrix[i,j]我在答案中加了这个。啊,是的,内部循环应该每次增加2而不是1。我会修正它的。谢谢你,我已经测试过了,现在它工作得非常好。