Apache Commons Math中与RealVectors的平方欧几里德距离

时间:2012-07-16 18:29:39

标签: java math apache-commons linear-algebra euclidean-distance

我在Java中使用Apache Commons RealVector和ArrayRealVector类。我可以计算两个向量v1和v2之间的欧氏距离

double dist = v1.getDistance(v2);

但是,我希望得到平方的欧几里德距离。我知道有一种方法可以使用Apache Commons Vector3D - 只需使用distanceSq函数。我正在使用高维矢量进行最近邻搜索,因此没有必要采用平方根 - 这在计算上浪费了我的需求。

我能做到

ArrayRealVector diff = v1.subtract(v2);
double dist = diff.dotProduct(diff);

当然这涉及返回一个我想避免的中间ArrayRealVector。我可以轻松地编写代码来获得欧氏距离的平方,但是我想使用Apache Commons数学解决方案。任何内置的解决方案都会很棒 - 即使是其他Apache Math类的解决方案也可能没问题。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

首先,我建议平方根和乘法的开销可能会被很多其他东西相形见绌。以简单的名义,我只是选择dist * dist,直到你确定这是瓶颈。

没有getDistanceSquared(),几乎可以肯定是因为这个原因;我想说这就是API要你做的事情。

例如,分配另一个RealVector确实会慢一些。

如果真的很重要,只需将代码复制到getDistance()并取出平方根!