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自己动手试一试 »