SciPy 空間資料
處理空間資料
空間資料是指在幾何空間中表示的資料。
例如:座標系統上的點。
我們在許多工中都會遇到空間資料問題。
例如:判斷一個點是否在邊界內。
SciPy 為我們提供了 scipy.spatial
模組,其中包含處理空間資料的函式。
三角剖分
多邊形的三角剖分是將多邊形劃分為多個三角形,以便我們可以計算多邊形的面積。
帶點的三角剖分是指建立由三角形組成的表面,其中所有給定的點至少是表面上任何三角形的一個頂點。
透過點生成這些三角剖分的一種方法是 Delaunay()
三角剖分。
示例
根據以下點建立三角剖分
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()
結果
注意: simplices
屬性建立了對三角形表示法的泛化。
凸包
凸包是覆蓋所有給定點的最小多邊形。
使用 ConvexHull()
方法建立凸包。
示例
為以下點建立凸包
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()
結果
KDTrees
KDTrees 是一種資料結構,經過最佳化,可用於最近鄰查詢。
例如:在一組點中使用 KDTrees,我們可以有效地詢問哪些點離給定點最近。
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)
結果
(2.0, 0)自己動手試一試 »
距離矩陣
資料科學中有許多距離度量用於查詢兩點之間的各種距離,例如歐幾里得距離、餘弦距離等。
兩個向量之間的距離不僅可以是它們之間的直線長度,還可以是它們與原點的角度,或者所需的單位步數等。
許多機器學習演算法的效能在很大程度上取決於距離度量。例如,“K 最近鄰”或“K 均值”等。
讓我們看一些距離度量
歐幾里得距離
查詢給定點之間的歐幾里得距離。
示例
from scipy.spatial.distance import euclidean
p1 = (1, 0)
p2 = (10, 2)
res = euclidean(p1, p2)
print(res)
結果
9.21954445729自己動手試一試 »
Cityblock 距離(曼哈頓距離)
這是使用 4 個移動方向計算的距離。
例如:我們只能向上、向下、向右或向左移動,不能斜著移動。
示例
查詢給定點之間的 cityblock 距離
from scipy.spatial.distance import cityblock
p1 = (1, 0)
p2 = (10, 2)
res = cityblock(p1, p2)
print(res)
結果
11自己動手試一試 »
餘弦距離
是兩點 A 和 B 之間的餘弦角度的值。
示例
查詢給定點之間的餘弦距離
from scipy.spatial.distance import cosine
p1 = (1, 0)
p2 = (10, 2)
res = cosine(p1, p2)
print(res)
結果
0.019419324309079777自己動手試一試 »
漢明距離
是兩個位不同的位數比例。
這是一種測量二進位制序列距離的方法。
示例
查詢給定點之間的漢明距離
from scipy.spatial.distance import hamming
p1 = (True, False, True)
p2 = (False, True, True)
res = hamming(p1, p2)
print(res)
結果
0.666666666667自己動手試一試 »