파이썬 SciPy Spartial Data
공간 데이터는 기하학적 공간에 표현되는 데이터를 의미한다.
예를 들어 좌표계를 가리킨다.
저희는 많은 작업에 대한 공간 데이터 문제를 처리한다.
예를 들어, 점이 경계 안에 있는지 없는지 확인한다.
SciPy는 공간 데이터 작업을 위한 기능이 있는 scipy.spatial 모듈을 제공한다.
파이썬 SciPy 삼각형으로 분할하기, 3각 측정 (Triangulation) - Delaunay(points).simplices , triplot()
다각형의 삼각형은 다각형의 면적을 계산할 수 있는 다각형을 여러 개의 삼각형으로 나누는 것이다.
점이 있는 삼각형은 주어진 모든 점이 표면에 있는 삼각형의 한 꼭짓점에 있는 표면 구성 삼각형을 만드는 것을 의미한다.
점을 통해 이러한 삼각측량을 생성하는 한 가지 방법은 Delaunay() 삼각측량법(Delaunay)이다.
예
다음 점에서 삼각측량을 작성한다:
#Three lines to make our compiler able to draw: import sys import matplotlib matplotlib.use('Agg') import numpy as np from scipy.spatial import Delaunay import matplotlib.pyplot as plt points = np.array([ [2, 4], [3, 4], [3, 0], [2, 2], [4, 1] ]) simplices = Delaunay(points).simplices plt.triplot(points[:, 0], points[:, 1], simplices) plt.scatter(points[:, 0], points[:, 1], color='r') plt.show() #Two lines to make our compiler able to draw: plt.savefig(sys.stdout.buffer) sys.stdout.flush() |
위의 코드를 실행하면 아래 그림과 같다.
참고: simplices 속성은 삼각형 표기법의 일반화를 만든다.
파이썬 SciPy Convex Hull - ConvexHull()
convex hull(볼록 껍질)은 주어진 점을 모두 포함하는 가장 작은 다각형이다.
ConvexHull() 메서드를 사용하여 ConvexHull을 만든다.
다음 점에 대해 볼록한 선체를 작성한다:
#Three lines to make our compiler able to draw: import sys import matplotlib matplotlib.use('Agg') import numpy as np from scipy.spatial import ConvexHull import matplotlib.pyplot as plt points = np.array([ [2, 4], [3, 4], [3, 0], [2, 2], [4, 1], [1, 2], [5, 0], [3, 1], [1, 2], [0, 2] ]) hull = ConvexHull(points) hull_points = hull.simplices plt.scatter(points[:,0], points[:,1]) for simplex in hull_points: plt.plot(points[simplex,0], points[simplex,1], 'k-') plt.show() #Two lines to make our compiler able to draw: plt.savefig(sys.stdout.buffer) sys.stdout.flush() |
위의 코드를 실행하면 아래 그림과 같다.
파이썬 SciPy KDTree - KDTree(), query()
KDTree는 가장 가까운 이웃 쿼리에 최적화된 데이터 구조이다.
예를 들어, KDTree를 사용하는 점들의 집합에서 우리는 어떤 점이 특정 주어진 점에 가장 가까운지를 효율적으로 물어볼 수 있다.
KDTree() 메서드는 KDTree 개체를 반환한다.
query() 메서드는 가장 가까운 이웃까지의 거리와 이웃의 위치를 반환한다.
점 (1,1)에서 가장 가까운 이웃 찾기:
from scipy.spatial import KDTree points = [(1, -1), (2, 3), (-2, 3), (2, -3)] kdtree = KDTree(points) res = kdtree.query((1, 1)) print('res = kdtree.query((1, 1)) : ', res) |
위의 코드를 실행하면 아래 그림과 같다.
파이썬 SciPy 행렬 거리(Distance Matrix)
데이터 과학에서 두 점 사이의 거리, 유클리드 거리, 코사인 거리 등 다양한 유형을 찾는 데 사용되는 거리 메트릭이 많이 있다.
두 벡터 사이의 거리는 두 벡터 사이의 직선 길이일 뿐만 아니라 원점에서 두 벡터 사이의 각도 또는 필요한 단위 계단 수 등일 수 있다.
머신 러닝 알고리즘의 많은 성능은 거리 행렬(예: "K Neighest Neighbors" 또는 "K Means") 등)에 크게 의존한다.
몇 가지 거리 메트릭을 살펴 보겠다:
파이썬 SciPy 유클리드 거리(Euclidian Distance) - euclidean()
주어진 점 사이의 유클리드 거리를 구한다.
from scipy.spatial.distance import euclidean p1 = (1, 0) p2 = (10, 2) res = euclidean(p1, p2) print('res = euclidean(p1, p2) : ', res) |
위의 코드를 실행하면 아래 그림과 같다.
파이썬 SciPy 도시 블록 거리(맨해튼 거리) - cityblock()
4도 이동을 사용하여 계산한 거리이다.
예를 들어, 우리는 대각선이 아닌 위쪽, 아래쪽, 오른쪽 또는 왼쪽으로만 움직일 수 있다.
주어진 점 사이의 도시 블록 거리를 찾는다:
from scipy.spatial.distance import cityblock p1 = (1, 0) p2 = (10, 2) res = cityblock(p1, p2) print('res = cityblock(p1, p2) : ', res) |
위의 코드를 실행하면 아래 그림과 같다.
파이썬 SciPy Cosine 거리
두 점 A와 B 사이의 코사인 각도 값이다.
주어진 점 사이의 코사인 거리를 구한다:
from scipy.spatial.distance import cosine p1 = (1, 0) p2 = (10, 2) res = cosine(p1, p2) print('res = cosine(p1, p2) : ', res) |
위의 코드를 실행하면 아래 그림과 같다.
파이썬 SciPy 해밍거리(Hamming distance)
두 비트가 다른 비트의 비율이다.
이진 시퀀스에 대한 거리를 측정하는 방법이다.
주어진 점 사이의 해밍 거리를 구한다:
from scipy.spatial.distance import hamming p1 = (True, False, True) p2 = (False, True, True) res = hamming(p1, p2) print('res = hamming(p1, p2) : ', res) |
위의 코드를 실행하면 아래 그림과 같다.
이번 글에서는 파이썬 SciPy 모듈에서 공간 데이터를 어떻게 처리하는지에 대해서 살펴보았다.
파이썬 SciPy 모듈에서 공간 데이터는 삼각측량과 분할은 delaunay() 메소드, 주어진 점을 모두 포함하는 가장 작은 다각형 ConvexHull() 메소드, KDTree() 메소드 등을 살펴보았다. 그리고 행렬의 거리를 측정하기 위해 euclidean() 메소드, citiblock() 메소드, cosine()메소드, hamming() 메소드 등을 살펴보았다.
꼭 손으로 눈으로 머리로 익히며 실습하기를 바란다.
모두 화이팅입니다.
출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.
'파이썬 > 파이썬기본문법' 카테고리의 다른 글
파이선 SciPy Interpolation(보간법) (1) | 2024.02.06 |
---|---|
파이썬 SciPy Matlab 배열 (0) | 2024.02.05 |
파이썬 SciPy 그래프 (0) | 2024.02.03 |
파이썬 SciPy Sparse Data - 희소 데이터 (0) | 2024.02.02 |
파이썬 SciPy에서 Constants - 단위 units (0) | 2024.01.31 |
댓글