R 也许我还没有理解数组的外积 玩具示例
我有两个简单的整数向量R 也许我还没有理解数组的外积 玩具示例,r,vector,R,Vector,我有两个简单的整数向量 ii <- 1:3 jj <- 1:2 names(ii) <-paste0("I_",ii) names(jj) <-paste0("J_",jj) ii;jj I_1 I_2 I_3 1 2 3 J_1 J_2 1 2 明确地给出一个函数,比如,连接向量的元素,这就是我得到的 outer(ii, jj, function(i,j) paste(i,j,sep = "-")) J_1 J_
ii <- 1:3
jj <- 1:2
names(ii) <-paste0("I_",ii)
names(jj) <-paste0("J_",jj)
ii;jj
I_1 I_2 I_3
1 2 3
J_1 J_2
1 2
明确地给出一个函数,比如,连接向量的元素,这就是我得到的
outer(ii, jj, function(i,j) paste(i,j,sep = "-"))
J_1 J_2
I_1 "1-1" "1-2"
I_2 "2-1" "2-2"
I_3 "3-1" "3-2"
问题
然而,当我尝试更进一步时,使用ii和jj作为两组位置向量的索引,为了计算向量之间的距离,这个想法失败了,如下所示
两组向量:
错误
当我尝试使用外积,按照上面的逻辑,计算从集合1中的点到集合2中的点的距离时,我只得到一个错误:
outer(ii, jj, function(i,j) distk(vi[i,], vj[j,]))
dim(robj)解决方案中的错误
在评论之后,我根据前面的distk()函数介绍了距离函数的矢量化版本,如下所示
distv <- function(p,p0) { # vectorized version
p <- if (is.null(dim(p))) as.data.frame(p) else as.data.frame(t(p))
p0 <- if (is.null(dim(p0))) as.data.frame(p0) else as.data.frame(t(p0))
mapply(distk, p, p0)
}
FUN
必须矢量化outer
并不是一次计算一对FUN
,而是将X和Y扩展到一个公共长度,然后调用FUN
一次,并强制结果具有适当的维度。
distk <- function(p,p0) { # two point distance
sqrt(sum((p0-p)^2))
}
distk(vi[3,], vj[1,])
[1] 8.602325
outer(ii, jj, function(i,j) distk(vi[i,], vj[j,]))
distv <- function(p,p0) { # vectorized version
p <- if (is.null(dim(p))) as.data.frame(p) else as.data.frame(t(p))
p0 <- if (is.null(dim(p0))) as.data.frame(p0) else as.data.frame(t(p0))
mapply(distk, p, p0)
}
outer(ii, jj, function(i,j) distv(vi[i,], vj[j,]))
J_1 J_2
I_1 5.000000 2.236068
I_2 7.211103 0.000000
I_3 8.602325 1.414214