我在Java中使用Apache Commons RealVector和ArrayRealVector类。我可以计算出两个向量V1和V2之间的欧氏距离在Apache Commons中与RealVectors的平方欧氏距离数学公式
double dist = v1.getDistance(v2);
不过,我希望得到的欧氏距离平方。我知道有一种方法可以用Apache Commons Vector3D来实现 - 只需使用distanceSq函数即可。我正在做高维向量的最近邻居搜索,所以没有必要去考虑平方根 - 这对我的需求来说只是计算上的浪费。
我能做
ArrayRealVector diff = v1.subtract(v2);
double dist = diff.dotProduct(diff);
当然,这涉及到返回中间ArrayRealVector,我想避免的。我可以很容易地编写代码来获得欧几里德距离的平方,但想要用Apache Commons数学的解决方案。任何内置的解决方案都会非常棒 - 即使是其他Apache Math类的解决方案也可能是正确的。
如果他已经在使用Commons Math,那么复制Commons Math正在做的事情会更加相关。 – 2012-07-16 19:29:23
是的,同意 - 这就是为什么我怀疑他想要拉马赫特。如果他担心自己不会像其他人一样快速写出代码,那么只需编写代码或从Mahout复制代码即可。 – 2012-07-16 19:37:29
p.s.在我做了搜索之后,我对Mahout感到好奇,最终购买了你的书。 :-) – 2012-07-16 19:39:10