r语言 - 寻找一个"vectorized"版本来存储矩阵中矢量元素的差异



我正在执行以下操作

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更高效、更优雅了。

最新更新