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()
结果
自己试一试 »
KD树
KD树是一种针对最近邻查询优化的数据结构。
例如,在一组点中使用 KD 树,我们可以有效地询问哪些点最靠近某个给定点。
KDTree()
方法返回一个 KD 树对象。
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自己试一试 »
城市街区距离(曼哈顿距离)
是使用 4 个自由度计算的距离。
例如,我们只能移动:上、下、右或左,不能对角移动。
示例
找到给定点之间的城市街区距离
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自己试一试 »