Supose我有2个data.frames,我想计算它们所有行之间的欧氏距离。我的代码是:
null
我确信有更有效的方法将其存储到矩阵中。
答案 0 :(得分:2)
您不需要计算循环内的距离,H2O的距离函数可以有效地计算所有行的距离。对于具有n x k
和m x k
维度的两个数据框,您可以通过以下方式找到n x m
距离矩阵:
distance_matrix <- h2o.distance(df1, df2, 'l2')
没有必要采用平方根,因为h2o.distance()
function允许您指定要使用的距离度量:"l1"
- 绝对距离(L1范数),"l2"
- 欧几里德距离(L2范数),"cosine"
- 余弦相似度和"cosine_sq"
- 平方余弦相似度。
按照您的示例,计算欧几里德距离矩阵的代码为:
library(h2o)
h2o.init()
df1 <- as.h2o(matrix(rnorm(7500 * 40), ncol = 40))
df2 <- as.h2o(matrix(rnorm(1250 * 40), ncol = 40))
distance_matrix <- h2o.distance(df1, df2, 'l2')
生成尺寸为7500 rows x 1250 columns
的矩阵。