2013-08-22 1 views
1

데이터 집합에 고유 라이브러리가있는 유사성 행렬을 만들려고합니다. 방금 csv 파일을 고유 행렬로 읽었지만 matlab 고객으로 알고 있습니다. bsxfun 또는 유클리드 거리 계산에 의한 인스턴스 간의 거리를 정의하는 것과 같은 것을 찾고 있습니다. 솔루션이나 소스로 함수가 도움이 될 수있는 방법은 무엇입니까? 나? 귀하의 샘플을 가정방금 ​​Eigen Matrix 대수 라이브러리를 사용하기 시작했고 데이터 집합, 제안의 유사성 행렬을 만들려고합니다.

+0

'Eigen' 라이브러리가 행렬 간의 유클리드 거리를 계산할 수 있다고 확신합니다. – fpe

답변

2

이 행렬 D에 행 방향으로 저장됩니다, 당신은 할 수 있습니다 :

VectorXd N = D.rowwise().squaredNorm(); 
MatrixXd S = N.replicate(1,n) + N.transpose().replicate(n,1); 
S.noalias() -= 2. * D * D.transpose(); 
S = S.array().sqrt(); 

이것은 |x-y|²=x²+y²-2x'y 그 사실을 이용한다. noalias() 문은 에이 겐 (Eigen)에 최적화 된 것일 뿐이므로이 제품에서 앨리어싱의 위험이 없으므로 일시적인 조치가 필요하지 않습니다. .array() 문은 모든 함수가 계수에 따라 적용되는 배열 영역으로 전환합니다.

+0

+1 여기 비슷한 MATLAB 코드입니다 : http://stackoverflow.com/a/4171845/97160 (행이 아니라 행렬의 열에서 작동하지만) – Amro

+0

이것을 사용하려면 무엇을 포함해야합니까? 코드? – erogol

+0

핵심 모듈 만 필요합니다.'#include ' – ggael

관련 문제