2010-03-20 4 views
3

나는 NumPy와의 포인트 배열이 있습니다유클리드 거리는

points = rand(dim, n_points) 

을 그리고 싶은 : 특정 지점과 다른 모든 사이

  1. 계산 모든 L2 규범 (유클리드 거리) points
  2. 모든 pairwise 거리를 계산하십시오.

및 바람직하게는 numpy 및 no. 어떻게 할 수 있습니까?

답변

4

당신은 SciPy의 scipy.spatial.distance 모듈 (기능 cdist 및/또는 pdist) 당신은 당신이 너무 방송을 함께 할 수있는 C.에서 수행 루핑 모두와 함께, 원하는 게 정확히 사용 기꺼이 있지만 일부 여분이 있다면 메모리 오버 헤드.

1

이 두 번째 부분에 도움이 될 수 있습니다

import numpy as np 
from numpy import * 
p=rand(3,4) # this is column-wise so each vector has length 3 
sqrt(sum((p[:,np.newaxis,:]-p[:,:,np.newaxis])**2 ,axis=0)) 

array([[ 0.  , 0.37355868, 0.64896708, 1.14974483], 
    [ 0.37355868, 0.  , 0.6277216 , 1.19625254], 
    [ 0.64896708, 0.6277216 , 0.  , 0.77465192], 
    [ 1.14974483, 1.19625254, 0.77465192, 0.  ]]) 

을 제공하는 경우 페이지이었다

array([[ 0.46193242, 0.11934744, 0.3836483 , 0.84897951], 
    [ 0.19102709, 0.33050367, 0.36382587, 0.96880535], 
    [ 0.84963349, 0.79740414, 0.22901247, 0.09652746]]) 

당신은

를 통해 항목 중 하나를 확인하실 수 있습니다
sqrt(sum ((p[:,0]-p[:,2])**2)) 
0.64896708223796884 

트릭은 신축을 넣고 방송을하는 것입니다.

행운을 빈다.