我在 Java 中使用 Apache Commons RealVector 和 ArrayRealVector 类。我可以计算两个 vector v1 和 v2 之间的欧氏距离
double dist = v1.getDistance(v2);
但是,我希望得到平方欧氏距离。我知道有一种方法可以使用 Apache Commons Vector3D 执行此操作 - 只需使用 distanceSq 函数即可。我正在使用高维 vector 进行最近邻搜索,因此没有必要计算平方根 - 这对我的需求来说只是计算上的浪费。
我可以
ArrayRealVector diff = v1.subtract(v2);
double dist = diff.dotProduct(diff);
当然,这涉及返回一个我想避免的中间 ArrayRealVector。我可以很容易地编写代码来获得平方欧氏距离,但我想使用 Apache Commons 数学的解决方案。任何内置的解决方案都很棒——即使来自其他 Apache Math 类的解决方案也可能没问题。
最佳答案
首先,我建议平方根和乘法的开销可能与许多其他事情相比相形见绌。为了简单起见,我将使用 dist * dist
直到您确定这是瓶颈。
没有 getDistanceSquared()
,几乎可以肯定是因为这个原因;我会说这就是 API 希望您做的。
例如,分配另一个 RealVector
确实会更慢。
如果真的很重要,只需将代码复制到 getDistance()
并取出平方根即可!
关于java - Apache Commons Math 中 RealVectors 的平方欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510325/