R 如何对矩阵而不是向量使用Sappy函数(或类似函数)?

R 如何对矩阵而不是向量使用Sappy函数(或类似函数)?,r,R,要加快以下速度: x <- c(0, 1, 1.1, 1.5, 1.9, 2.8, 2.9, 3.5) n <- length(x) temp <- 0 for(i in 1:n) { for(j in 1:n) { temp <- temp + dnorm(x[i] - x[j]) } } > temp [1] 13.40157 x <- matrix(c(3, 3.3, 5, 6, 7, 4), nrow=3, nc

要加快以下速度:

x <- c(0, 1, 1.1, 1.5, 1.9, 2.8, 2.9, 3.5)
n <- length(x)
temp <- 0
  for(i in 1:n) {
    for(j in 1:n) {
      temp <- temp + dnorm(x[i] - x[j])
    }
  }

> temp
[1] 13.40157
x <- matrix(c(3, 3.3, 5, 6, 7, 4), nrow=3, ncol=2, byrow=FALSE)
n <- length(x[,1])

library(mvtnorm) # for dmvnorm
temp <- 0
for(i in 1:n) {
  for(j in 1:n) {
    temp <- temp + dmvnorm(x[i,] - x[j,])
  }
}

> temp
[1] 0.6686979
但是如何对矩阵而不是向量使用相同的技巧,即我需要加快以下速度:

x <- c(0, 1, 1.1, 1.5, 1.9, 2.8, 2.9, 3.5)
n <- length(x)
temp <- 0
  for(i in 1:n) {
    for(j in 1:n) {
      temp <- temp + dnorm(x[i] - x[j])
    }
  }

> temp
[1] 13.40157
x <- matrix(c(3, 3.3, 5, 6, 7, 4), nrow=3, ncol=2, byrow=FALSE)
n <- length(x[,1])

library(mvtnorm) # for dmvnorm
temp <- 0
for(i in 1:n) {
  for(j in 1:n) {
    temp <- temp + dmvnorm(x[i,] - x[j,])
  }
}

> temp
[1] 0.6686979

x在3x3的情况下,需要从以下行对计算密度:

1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3
我将生成一个矩阵,其中每行对应每对中的第一个元素,每行对应每对中的第二个元素,减去这两个元素,然后将结果传递给
dmvnorm

mat1 <- x[rep(1:n, each=n),]
mat2 <- x[rep(1:n, n),]
sum(dmvnorm(mat1-mat2))
# [1] 0.6686979
mat1