카테고리 없음

[파이썬] 파이썬에서 3 차원 점 사이의 최소, 평균 및 최대 거리

행복을전해요 2021. 2. 17. 12:04

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