我想计算两个矩阵/数据帧之间的所有行组合的距离度量。
结果将是一个矩阵,其中单元格 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, ])))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)