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

标签 r loops for-loop store

我是 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/

相关文章:

c++ - 更好地解释数组

python - matplotlib for 循环显示、保存和重绘所有图

r - 将字符串分隔成 r 中的列表

r - 如何在 r 中合并多张 Excel 工作簿?

c - 函数在被强制转换两次后对其自身进行强制转换

c++ - 无需测试即可更改循环内部

javascript - 在遍历对象属性时删除对象属性是否安全?

java - 为什么 for(T t : this) work and what does it mean?

r - 在 R 中安装包时发出警告

R 返回每行最小列的索引