r - 计算R中两个矩阵的所有行组合的函数

标签 r

我想计算两个矩阵/数据帧之间所有行组合的距离度量。

结果将是一个矩阵,其单元格 i,j 对应于由应用于第一个矩阵的第 i 行和第二个矩阵的第 j 行的函数给出的结果。这是一个示例,说明我想用 for 循环做什么,以及一个示例函数。

x<-matrix(rnorm(30),10,3)  ## Example data
y<-matrix(rnorm(12),4,3)

results<-matrix(NA,nrow(x),nrow(y))

for (i in 1:nrow(x)){
  for (j in 1:nrow(y)){
    r1<-x[i,]
    r2<-y[j,]
    results[i,j]<-sum(r1*r2)  ## Example function
  }
}

在现实生活中,我的第一个矩阵有几十万行,第二个矩阵有几百行,我想计算的函数不是点积(我意识到我可能选择了一个函数,让它看起来像我想要做的就是矩阵乘法)。事实上,我想替换一些函数,所以我想找到一个可推广到不同函数的解决方案。一种思考方式是我想劫持矩阵乘法来执行其他功能。用 for 循环计算这个需要很长时间,这是不切实际的。我将非常感谢有关如何在没有 for 循环的情况下执行此操作的任何提示。

最佳答案

outer(1:nrow(x), 1:nrow(y), Vectorize(function(i, j) sum(x[i, ] * y[j, ])))

关于r - 计算R中两个矩阵的所有行组合的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10759588/

相关文章:

r - 非重复元素的最小 id

r - 使用带有替换函数的 get()

r - 如何为圆形图添加外部轨道

xml - 处理 R 中的空 XML 节点

r - 如何光栅化ggplot的单层?

r - str_extract 仅捕获重复出现的关键字的一个实例

r - 在 R 中加载多个制表符分隔的文件

r - 创建序列 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4 , 4 与 seq()

r - R S4 类和 Matrix 包中重载 + 运算符

r - 如何更改条形图上的颜色?