我是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)}
答案 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)])
}
我检查过它们会产生相同的结果。