1. ホーム
  2. R

R - ユークリッド距離の計算を簡単にする方法

2022-02-12 04:11:01
<パス

これまでのユークリッド距離の計算では、直接 dist() メソッドを使用します。しかし、実際には、大量のデータを扱う場合、この方法は切り捨てられ、実行に時間がかかる。
Baiduは、非常にハイレベルな方法と感じられるものを考え出しました。
ユークリッド距離の高速計算 [douban
内部には演算メソッドが用意されており、以下のようなコードになっています。

mat <- matrix(runif(2000*1000),nrow=2000)
system.time({
  smat <- apply(mat, 1, crossprod)
  mat1 <- matrix(smat, nrow=2000, ncol=2000)
  mat3 <- tcrossprod(mat)
  mat4 <- mat1 + t(mat1) - 2*mat3
  diag(mat4) <- 0
  mat5 <- sqrt(mat4)
  })
system.time(mat7 <- as.matrix(dist(mat))))
#print(mat7[1:6, 1:6])

この方法で、400万個のデータを約22秒で計算することができます
この方法を使って、自分のデータのデバッグを始めてみてください。
デバッグの際に重要なのは mat4 この行列。は、まず mat1 t(mat1) で足し算と引き算ができること、次に、その和が mat3 さもなければ、両方のエラーが報告されます: 非整合型配列
借金のために会いましょう!