如何将双循环结果存储在矩阵中,并将两个样本的观察值作为行和列进行观察

时间:2013-06-18 22:39:07

标签: r loops for-loop store

我是R的初学者。我写了一个双循环用于计算矩阵x w.r.t的每一行之间的点积。每次样本X的所有观察结果。我不知道如何将结果存储在矩阵中,该矩阵具有样本X的观察列和x行的行。我希望有一个人可以帮助我。提前谢谢。

这是我的代码:

Dot.product <- function(x,X){
theta <- matrix(NA,nrow=nrow(x),ncol=nrow(X),byrow=T)
for(i in 1:nrow(X)){
for(j in 1:nrow(x)){
  theta[i,j] <- acos((sum(x[j,]*X[i,]))/(sqrt
        (sum(x[j,]*x[j,]))*sqrt(sum(t(X[i,])*X[i,]))))
 }}

return(theta)}

1 个答案:

答案 0 :(得分:2)

您的尺寸有误。将theta[i,j]替换为theta[j,i],应该这样做。

作为奖励,以下是我如何使用矢量化函数而不是双循环编写函数:

Dot.product <- function(x, X) {
   a <- tcrossprod(x, X)
   n1 <- sqrt(rowSums(x * x))
   n2 <- sqrt(rowSums(X * X))
   acos(a / n1[row(a)] / n2[col(a)])
}

我检查过它们会产生相同的结果。