Numpy 두 점 사이 거리 - Numpy du jeom sai geoli

파이썬으로 좌표평면 위의 두 점 사이의 거리 구하기

파이썬으로 좌표 평면 위의 두 점 사이의 거리 구하는 프로그램을 만들어 보았습니다.

코드

import math

a1,b1 = input("a1의 x, y 좌표를 , 로 나누어서 입력하세요 ").split(',')
a2,b2 = input("a2의 x, y 좌표를 , 로 나누어서 입력하세요 ").split(',')
a1 = int(a1)
b1 = int(b1)
a2 = int(a2)
b2 = int(b2)

print(math.sqrt((a2-a1) ** 2)+math.sqrt((b2-b1) ** 2))

실행화면

Numpy 두 점 사이 거리 - Numpy du jeom sai geoli

코드 설명

Numpy 두 점 사이 거리 - Numpy du jeom sai geoli

위의 사진은 두 점 사이의 거리를 구하는 공식입니다.

공식을 코드로 구현하기에 앞서 먼저 input로 좌표평면 위의 두 개의 점을 각각 , 로 구별하여 입력받고 int로 치환해줍니다. 

그리고 루트 a2 -a1의 제곱 + b2-b1의 제곱을 출력해줍니다.

이때 루트는 math 라이브러리를 이용해서 math.sqrt()를 가져와 사용하였습니다.

사실 이거 만들 시간에 문제 풀었어도 됐지만 만들고 나니까 뿌듯하네요 깃허브에도 올렸습니다.

GitHub - kgoka/higher-mathematics: 파이썬으로 고등수학 풀기

파이썬으로 고등수학 풀기. Contribute to kgoka/higher-mathematics development by creating an account on GitHub.

github.com

Numpy 두 점 사이 거리 - Numpy du jeom sai geoli

혹시 이 글 보시는 분 계시면 하트 한 번씩 클릭해주시면 감사하겠습니다!

고등 수학 교과서에 나오는 모든 공식을 이처럼 파이썬 프로그램으로 구현해서 머리를 안 쓰고 문제를 풀어보는 것도 재미있을 것 같습니다.

포스팅 읽어주셔서 감사합니다 이상으로 파이썬으로 좌표평면 위의 두 점 사이의 거리 구하기였습니다!


22.06.18 수정

제가 당시 무슨 생각이였는지 코드를 잘못 작성했습니다.

아래의 코드가 맞습니다.

import math

a1,b1 = input("a1의 x, y 좌표를 , 로 나누어서 입력하세요 ").split(',')
a2,b2 = input("a2의 x, y 좌표를 , 로 나누어서 입력하세요 ").split(',')
a1 = int(a1)
b1 = int(b1)
a2 = int(a2)
b2 = int(b2)

print((math.sqrt((a2-a1)**2 + (b2 - b1)**2)))

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