2013-10-31 2 views
1

저는 테스트 벡터와 이전 분포 사이의 마할 라 노비스 거리를 계산하기 위해 rpy2를 사용해 왔습니다. rpy2를 삭제하고 scipy로 옮기고 싶습니다. 그러나 테스트 할 때 rpy2와 scipy는 같은 결과를 반환하지 않습니다. 여기 내 샘플 코드가 있습니다.Mahalanobis 거리가 rpy2와 scipy 사이에 일치하지 않습니다.

import numpy as np 
from scipy import linalg 
from scipy.spatial.distance import mahalanobis as mahalanobis 
import rpy2.robjects as robjects 

# The vector to test. 
test_values = [692.5816522801106, 1421.4737901031651, 6.117859, 7.259449] 
test_values_r = robjects.FloatVector(test_values) 
test_values_np = np.array(test_values) 

# The covariance matrix from the prior distribution 
covs = [15762.87, 13486.23, 34.61164, 22.15451, 
     13486.23, 36003.67, 33.8431, 30.52712, 
     34.61164, 33.8431, 0.4143354, 0.1125765, 
     22.15451, 30.52712, 0.1125765, 0.2592451] 
covs_np = np.reshape(np.array(covs), (4,-1)) 
covs_r = robjects.r["matrix"](robjects.FloatVector(covs), nrow = 4) 

# The means of the prior distribution 
centers = [808.0645, 1449.711, 4.8443, 4.95776] 
centers_np = np.array(centers) 
centers_r = robjects.FloatVector(centers) 

r_dist = robjects.r["mahalanobis"](test_values_r, centers_r, covs_r) 
# <FloatVector - Python:0x1052275a8/R:0x10701bfa8> 
# [29.782287] 

np_dist = mahalanobis(test_values_np, centers_np, linalg.inv(covs_np)) 
# 5.4573150053873185 

나는 분명한 뭔가를 놓치고 있습니까?

답변

4

R 함수는 의 제곱 마하라 누 비스 거리를 반환합니다 (예 : here 참조). 따라서

:

>>> r_dist[0] 
29.782287068025585 
>>> np_dist 
5.4573150053873185 
>>> np_dist**2 - r_dist[0] 
3.5527136788005009e-15