我正在进行R任务,我必须编写一个执行dist.xyz
所做的功能。
dist.xyz(a, b = NULL, all.pairs=FALSE)
a和b是数字矩阵,函数计算相应行之间的距离 'a'和'b'。
我尝试了一个for循环(如下所示),但是它花了太长时间,“apply”只允许我们一次对1个矩阵进行操作。
dis = vector()
for (i in 1:nrow(a)) {
append(dis,sqrt(sum((a[i,] - b[i,]) ^ 2)))
}
有没有办法“应用”两个矩阵?
提前致谢
答案 0 :(得分:1)
如果您有示例数据会更容易。但这是我的看法。对于2个矩阵的“应用”,这不是一般解决方案。但是,在您的情况下,您只需要申请单个矩阵a-b,因为每行的元素差异是您首先采用的。然后将square,sum和square root应用于每一行以获得结果。
set.seed(7) # just to ensure reproducible results
rowDist<-function(a,b) {
apply(a-b,1,function(x)sqrt(sum(x^2)))
}
a<-matrix(rnorm(25),5,5)
b<-matrix(rnorm(25),5,5)
rowDist(a,b)
#[1] 2.716251 2.685056 3.699462 2.125998 3.437412