2017-04-23 91 views
0

我有两个矩阵:如何计算存储在两个单独矩阵的行中的两点之间的欧几里德距离?

matrixes with points

我想计数点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之间的距离正确的结果但是一旦矩阵由附加的列扩展的表达也被扩展,这是一个不可接受的解决方案...

你会如此善良,并告诉如何实现这一目标?任何帮助都会比欢迎。我坚持这一个了一会儿......

+2

不要发表您的数据作为图像,请学习如何给出[可重现的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap

回答

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 
+0

明白了!非常感谢! – wounky

相关问题