3

Java에서 Apache Commons RealVector 및 ArrayRealVector 클래스를 사용하고 있습니다. 나는 내가 제곱 유클리드 거리를 얻기 위해 찾고 있어요, 그러나Apache Commons의 RealVectors와의 제곱 유클리드 거리

double dist = v1.getDistance(v2); 

로 두 개의 벡터 v1 및 V2 사이의 유클리드 거리를 계산할 수 있습니다. 나는 아파치 커먼즈 Vector3D로 이것을 수행 할 수있는 방법이 있다는 것을 알고있다. 단지 distanceSq 함수를 사용하라. 고차원 벡터를 사용하여 가장 가까운 이웃 검색을 수행하고 있으므로 제곱근을 취할 필요가 없습니다. 단지 계산상의 낭비 일뿐입니다.

나는 이것이 내가 피하려는 중간 ArrayRealVector를 반환 포함 물론

ArrayRealVector diff = v1.subtract(v2); 
double dist = diff.dotProduct(diff); 

할 수 있습니다. 제곱 된 유클리드 거리를 얻기위한 코드를 쉽게 작성할 수 있지만 Apache Commons 수학의 해답을 원합니다. 모든 내장 된 솔루션은 훌륭 할 것입니다. 심지어 다른 Apache Math 클래스의 솔루션조차도 괜찮을 것입니다.

http://svn.apache.org/repos/asf/mahout/trunk/core/src/main/java/org/apache/mahout/common/distance/EuclideanDistanceMeasure.java

에 저를지도 한 :

답변

1

첫째, 제곱근과 곱셈의 오버 헤드가 다른 많은 것들이 아마 왜소합니까? 단순함의 이름으로 병목 현상이 발생하기 전까지는 dist * dist으로 갈 것입니다.

getDistanceSquared()은 거의 확실하게 이러한 이유 때문에 존재하지 않습니다. 나는 그것이 API가 당신이하기를 원하는 것이라고 말하고 싶습니다.

예를 들어 다른 RealVector을 할당하는 것이 실제로 느려질 것입니다.

정말로 중요한 경우 코드를 getDistance()으로 복사하고 제곱근을 꺼냅니다!

1

이 톱 난 당신이 같은 간단한 계산을 위해 두싯을 끌어하려는 의심

https://builds.apache.org/job/Mahout-Quality/javadoc/org/apache/mahout/common/distance/SquaredEuclideanDistanceMeasure.html

을,하지만 당신은 아마 복사 할 수 있습니다 그들이 사용하는 코드가 무엇이든간에.

+0

이미 Commons Math를 사용하고 있다면 Commons Math가하는 일을 복사하는 것이 더 관련이 있습니다. –

+0

그래, 동의 했어. 그래서 그가 마후트를 끌어 들이고 싶어할지 모르겠다. 제안은 코드를 작성하거나 Mahout의 코드를 복사하는 것입니다. 그는 다른 누군가의 것보다 빨리 그 코드를 쓰지 않을까 우려하고 있습니다. –

+0

p.s. 내가 수색을 한 후에 나는 Mahout에 대해 궁금해서 책을 사기 시작했다. :-) –

관련 문제