我正在执行以下操作
a <- c(3, 7, 1)
M <- matrix(data = NA,
nrow = 3,
ncol = 3)
M
# a_i - a_j
for(i in seq_along(a)) {
for (j in seq_along(a)) {
M[i, j] <- a[i] - a[j]
}
}
想知道是否有一种更优雅的方式,即R式的方式。类似于CCD_ 1。
我们可以在base R
中使用outer
outer(a, a, `-`)
或使用sapply
sapply(a, `-`, a)
如果你真的想玩tcrossprod()
,下面可能是的诀窍
> tcrossprod(a^0, a) - a
[,1] [,2] [,3]
[1,] 0 4 -2
[2,] -4 0 -6
[3,] 2 6 0
但我认为,没有什么比outer
更高效、更优雅了。