我是 R 的初学者。我编写了一个双 for 循环来计算矩阵 x 的每一行之间的点积。每次样本 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)}
最佳答案
您的尺寸有误。将 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)])
}
我已经检查过它们产生相同的结果。
关于r - 如何将双循环结果存储在矩阵中,并将两个样本的观察结果作为行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17180195/