我在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 math的解决方案。任何内置的解决方案都很好——甚至来自其他Apache Math类的解决方案也可能是可以接受的。