java - Apache Commons Math 中 RealVectors 的平方欧氏距离

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

我在 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/

相关文章:

java - 在Java中绘制多段线

java - 动态添加内容时将 Jscrollpanes 宽度限制为父级宽度

JavaScript:轨道相机的半工作公式

java - 根据比较器寻找最小值

java - Android 如何使用 while 循环更新列表项?

java - 将数据从 AWS Lambda 发送到 SQS 队列时连接重置

c++ - Eigen :高效克罗内克积

c# - 当任何数学运算产生 'NaN' 时,如何强制 C# 编译器抛出异常?

java - 损坏的 Eclipse 构建路径?

java - 在 Apache commons-math3 中计算 PolynomialCurveFitter 的 R 方