2017-08-22 76 views
1

Supose我有2個data.frames,我想計算他們所有行之間的歐氏距離。我的代碼是:用H2O存儲距離的最佳方式是什麼?

set.seed(121) 
# Load library 
library(h2o) 
system.time({ 
    h2o.init() 
    # Create the df and convert to h2o frame format 
    df1 <- as.h2o(matrix(rnorm(7500 * 40), ncol = 40)) 
    df2 <- as.h2o(matrix(rnorm(1250 * 40), ncol = 40)) 
    # Create a matrix in which I will record the distances 
    matrix1 <- as.h2o(matrix(0, nrow = 7500, ncol = 40)) 
    # Loop to calculate all the distances 
    for (i in 1:nrow(df2)){ 
    matrix1[, i] <- h2o.sqrt(h2o.distance(df1, df2[, i])) 
    } 
}) 

我確信有更高效的方法將它存儲到矩陣中。

+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的矩陣。

相關問題