2017-08-22 13 views
1

私は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 km x k寸法の2つのデータフレームのために、あなたは次のようにn x m距離行列を見つけることができます。

distance_matrix <- h2o.distance(df1, df2, 'l2') 

h2o.distance() functionはあなたが何を距離尺度が使用することを指定することができますので、平方根を取る必要はありませんが、 :"l1" - 絶対距離(L1ノルム)、"l2" - ユークリッド距離(L2ノルム)、"cosine" - コサイン類似度および0乗算コサイン類似度。

あなたの例に続いて、ユークリッド距離行列を計算するためのコードは次のようになります

寸法 7500 rows x 1250 columns有するマトリックスを生じる
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') 

関連する問題