我有一个名为"mat"的矩阵和一个名为"center"的较小矩阵.
temp = c(1.8421,5.6586,6.3526,2.904,3.232,4.6076,4.8,3.2909,4.6122,4.9399)
mat = matrix(temp, ncol=2)
[,1] [,2]
[1,] 1.8421 4.6076
[2,] 5.6586 4.8000
[3,] 6.3526 3.2909
[4,] 2.9040 4.6122
[5,] 3.2320 4.9399
center = matrix(c(3, 6, 3, 2), ncol=2)
[,1] [,2]
[1,] 3 3
[2,] 6 2
Run Code Online (Sandbox Code Playgroud)
我需要计算每排垫子与每排中心之间的距离.例如,mat [1,]和center [1,]的距离可以计算为
diff = mat[1,]-center[1,]
t(diff)%*%diff
[,1]
[1,] 3.92511
Run Code Online (Sandbox Code Playgroud)
同样,我可以找到mat [1,]和center [2,]的距离
diff = mat[1,]-center[2,]
t(diff)%*%diff
[,1]
[1,] 24.08771
Run Code Online (Sandbox Code Playgroud)
对于每排垫子重复这个过程,我最终会结束
[,1] [,2]
[1,] 3.925110 24.087710
[2,] 10.308154 7.956554
[3,] 11.324550 1.790750
[4,] 2.608405 16.408805
[5,] 3.817036 16.304836
Run Code Online (Sandbox Code Playgroud)
我知道如何使用for循环实现它.我真的希望有人可以通过某种apply()函数告诉我如何使用它,也许mapply()我想.
谢谢
这将解决它
t(apply(mat,1,function(row){
d1<-sum((row-center[1,])^2)
d2<-sum((row-center[2,])^2)
return(c(d1,d2))
}))
Run Code Online (Sandbox Code Playgroud)
结果:
[,1] [,2]
[1,] 3.925110 24.087710
[2,] 10.308154 7.956554
[3,] 11.324550 1.790750
[4,] 2.608405 16.408805
[5,] 3.817036 16.304836
Run Code Online (Sandbox Code Playgroud)