Как рассчитать евклидово расстояние между двумя точками, хранящимися в строках двух отдельных матриц?

У меня есть две матрицы:

матрицы с точками

Я хотел бы подсчитать расстояние между точкой X и точкой Y без использования цикла и так, как когда матрица расширяется дополнительными столбцами, выражение/функция работает.

Для проверки можно использовать:

sqrt((m1[,1] - m2[,1])^2 + (m1[,2] - m2[,2])^2 + (m1[,3] - m2[,3])^2 + (m1[,4] - m2[,4])^2 + (m1[,5] - m2[,5])^2)

Вышеприведенное выражение дает правильный результат для расстояния между X и Y, однако, как только матрица расширяется дополнительными столбцами, выражение также должно быть расширено, и это неприемлемое решение...

Не будете ли вы столь любезны и подскажете, как этого добиться? Любая помощь будет более чем приветствуется. Я застрял с этим на некоторое время...


person wounky    schedule 23.04.2017    source источник
comment
Не публикуйте свои данные в виде изображения, узнайте, как предоставить воспроизводимый пример   -  person Jaap    schedule 23.04.2017


Ответы (1)


- между матрицей является поэлементным в R, а rowSums полезно для вычисления суммы по строке:

m1 <- matrix(
    c(4, 3, 1, 6,
      2, 4, 5, 7,
      9, 0, 1, 2,
      6, 7, 8, 9,
      1, 6, 4, 3),
    nrow = 4
)

m2 <- matrix(
    c(2, 6, 3, 2,
      9, 4, 1, 4,
      1, 3, 0, 1,
      4, 5, 0, 2,
      7, 2, 1, 3),
    nrow = 4
)


sqrt((m1[,1] - m2[,1])^2 + (m1[,2] - m2[,2])^2 + (m1[,3] - m2[,3])^2 + (m1[,4] - m2[,4])^2 + (m1[,5] - m2[,5])^2)
# [1] 12.529964  6.164414  9.695360  8.660254

sqrt(rowSums((m1 - m2) ^ 2))
# [1] 12.529964  6.164414  9.695360  8.660254
person mt1022    schedule 23.04.2017
comment
Понятно! Большое спасибо! - person wounky; 23.04.2017