我在 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 类的解决方案也可能没问题。