0

我正在做一个 R 任务,我必须编写一个函数来完成dist.xyz它的工作。

dist.xyz(a, b = NULL, all.pairs=FALSE) 

a 和 b 是数字矩阵,该函数计算“a”和“b”对应行之间的距离。

我尝试了一个 for 循环(如下所示),但它花费的时间太长,并且“应用”只允许我们一次对 1 个矩阵进行操作。

 dis = vector()
 for (i in 1:nrow(a)) {
    append(dis,sqrt(sum((a[i,] - b[i,]) ^ 2)))
 } 

有没有办法“应用”到两个矩阵?

提前致谢

4

1 回答 1

1

如果您有示例数据会更容易。但这是我的看法。这不是“适用于 2 个矩阵”的通用解决方案。但是,在您的情况下,您只需要申请一个矩阵 ab,因为每行的元素差异是您首先要做的事情。然后对每一行应用平方、总和和平方根以获得结果。

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
于 2013-03-19T16:48:52.453 回答