If you don't mind using scipy, this is fairly trivial:
import numpy as np
import scipy.spatial.distance as distance
points = np.array([(472765.09, 6191522.78, 13.0), (472764.82, 6191524.09, 9.0), (472763.8, 6191525.68, 8.0), (472764.07, 6191524.39, 16.0)])
dist = distance.pdist(points)
print dist.max()
print dist.min()
print np.median(dist)
print np.average(dist)
-------------------다음은 내장 및 모듈 함수를 가능한 많이 사용하는 일반화 된 버전입니다. 나는 numpy
설치 하지 않았지만 3D 또는 nD 거리 기능이 있으면 dist3D()
아래 대신 사용하십시오 .
실제로, numpy
이러한 즉각적인 계산의 속도를 높이는 데 사용할 수있는 여러 (기타) 함수가 포함되어 있습니다. 이에 기반한 답을 더 찾고 있다면 적어도 질문의 태그를 수정하여이를 표시해야합니다.
import math
import numpy as np
points = [(472765.09, 6191522.78, 13.0), (472764.82, 6191524.09, 9.0),
(472763.8, 6191525.68, 8.0), (472764.07, 6191524.39, 16.0)]
points += [points[0]] # dup first point to include dist from last to first
dist3D = lambda a, b: math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2 + (a[2]-b[2])**2)
dists = sorted(dist3D(points[i], points[i+1]) for i in xrange(len(points)-1))
min_dist, max_dist = dists[0], dists[-1]
#mean_dist = sum(dists) / len(dists)
mean_dist = np.average(dists)
print 'min_dist: {:.2f}, mean_dist: {:.2f}, max_dist: {:.2f}'.format(
min_dist, mean_dist, max_dist)
-------------------math.sqrt
비교적 무거운 작업입니다. 대신 최소, 중앙값 및 최대 값을 찾는 데 충분한 거리 제곱을 저장 한 다음 제곱근을 얻을 수 있습니다. 또한 수동으로 단일 반복으로 최대 및 최소를 찾아보십시오.
출처
https://stackoverflow.com/questions/22079817