私は最近傍探索プロジェクトに取り組んでおり、ユークリッド、マンハッタンなどの距離メトリックが必要です。それらを自分で実装するか、使用できる標準の Java コードがあるかどうか疑問に思っていましたか?
ありがとう
私は最近傍探索プロジェクトに取り組んでおり、ユークリッド、マンハッタンなどの距離メトリックが必要です。それらを自分で実装するか、使用できる標準の Java コードがあるかどうか疑問に思っていましたか?
ありがとう
マンハッタン距離は、 で簡単に実装できMath.abs(x1-x2)+Math.abs(y1-y2)
ます。
ユークリッド距離のメソッドを使用できますがPoint2D.distance(x1,y1,x2,y2)
、計算はまったく難しくありません。
double dx = x1-x2, dy = y1-y2;
Math.sqrt(dx*dx+dy*dy);
これをより高い次元に拡張する必要がある場合は、座標を配列として渡し、ループを使用して平方和を計算します。
RealVector-Interfaces を実装する Apaches ArrayRealVector を見てください。
そこには、n 次元ベクトルの L-1、L-inf、およびユークリッド ノルムとメトリックの実装があります。
いくつかの車輪は小さすぎて、再発明しないようにしようとはしません。
public class Distances
{
private Distances() {}
public static euclidean(double a, double b)
{
return Math.sqrt(a * a + b * b);
}
public static manhatten(double a, double b)
{
return Math.abs(a) + Math.abs(b);
}
}
使用法:
double x1 = 15.0, y1 = 15.0;
double x2 = 25.5, y2 = 37.25;
Distances.euclidean(x1 - x2, y1 - y2); // order does not matter
Distances.euclidean(y2 - y1, x1 - x2); // distance is the same regardless
Distances.manhatten(x1 - x2, y1 - y2);