首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的距离度量

Java中的距离度量
EN

Stack Overflow用户
提问于 2012-11-15 05:27:26
回答 3查看 1K关注 0票数 2

我正在做最近邻搜索项目,我需要欧几里得、曼哈坦等距离度量。我可以自己实现它们,或者,我想知道是否有标准的java代码可以使用?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-15 05:40:08

看看Apaches,它实现了RealVector- ArrayRealVector接口。

这里有L-1,L-inf和euklidian范数的实现,以及n维向量的metrik。

https://code.google.com/p/symja/source/browse/trunk/commons-math/src/main/java/org/apache/commons/math3/linear/ArrayRealVector.java?r=883

票数 2
EN

Stack Overflow用户

发布于 2012-11-15 05:30:06

使用Math.abs(x1-x2)+Math.abs(y1-y2)很容易实现曼哈顿距离。

虽然您可以使用Point2D.distance(x1,y1,x2,y2)方法计算欧几里德距离,但计算它并不困难:

代码语言:javascript
复制
double dx = x1-x2, dy = y1-y2;
Math.sqrt(dx*dx+dy*dy);

如果必须将其扩展到更高的维度,请将坐标作为数组传递,并使用循环计算平方和。

票数 3
EN

Stack Overflow用户

发布于 2012-11-15 05:31:08

有些轮子太小了,不想费心去重新发明。

代码语言:javascript
复制
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);
    }
}

用法:

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13387618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档