我正在做最近邻搜索项目,我需要欧几里得、曼哈坦等距离度量。我可以自己实现它们,或者,我想知道是否有标准的java代码可以使用?
谢谢
发布于 2012-11-15 05:40:08
看看Apaches,它实现了RealVector- ArrayRealVector接口。
这里有L-1,L-inf和euklidian范数的实现,以及n维向量的metrik。
发布于 2012-11-15 05:30:06
使用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);如果必须将其扩展到更高的维度,请将坐标作为数组传递,并使用循环计算平方和。
发布于 2012-11-15 05:31:08
有些轮子太小了,不想费心去重新发明。
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);https://stackoverflow.com/questions/13387618
复制相似问题