scipy.spatial – 空间数据结构和算法
在本文中,我们将看到空间数据结构和算法,它用于表示几何空间中的数据。
什么是空间数据结构?
空间包通过利用 Qhull 库计算一组点的三角剖分、Voronoi 图和凸包。此外,它还包含用于最近邻点查询的 KDTree 实现和用于各种指标距离计算的实用程序。
示例 1:Delaunay 三角剖分
在数学和计算几何中,对于给定的一组离散点 p 的 Delaunay 三角剖分,在一个平面上是一个三角剖分 DT(p),使得没有点 p 位于 DT(p) 中任何三角形的外接圆内。
Python
from scipy.spatial import Delaunay
import numpy as np
import matplotlib.pyplot as plt
points = np.array([[1, 4], [2, 1], [3, 0],
[0, 2], [4, 3]])
tri = Delaunay(points)
plt.triplot(points[:, 0], points[:, 1], tri.simplices.copy())
plt.plot(points[:, 0], points[:, 1], 'o')
plt.show()
Python
from scipy.spatial import Delaunay
import numpy as np
points = np.array([[0, 0], [0, 1], [1, 0],
[1, 1], [1, 1]])
tri = Delaunay(points)
print(tri.simplices)
print(tri.coplanar)
Python
from scipy.spatial import ConvexHull
import numpy as np
import matplotlib.pyplot as plt
points = np.random.rand(10, 2)
hull = ConvexHull(points)
plt.plot(points[:, 0], points[:, 1], 'o')
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'k-')
plt.show()
Python3
from scipy.spatial import KDTree
points = np.random.rand(10, 2)
kdtree = KDTree(points)
result = kdtree.query((1, 1))
print(result)
输出:
示例 2:共面点
共面点是位于同一平面内的三个或更多点。回想一下,平面是一个平面,在所有方向上都没有尽头。
Python
from scipy.spatial import Delaunay
import numpy as np
points = np.array([[0, 0], [0, 1], [1, 0],
[1, 1], [1, 1]])
tri = Delaunay(points)
print(tri.simplices)
print(tri.coplanar)
输出:
[[3 1 0]
[2 3 0]]
[[4 0 3]]
示例 3:凸包
欧几里得空间(或更一般地,在实数上的仿射空间)中一组点 X 的凸包或凸包络是包含 X 的最小凸集。
Python
from scipy.spatial import ConvexHull
import numpy as np
import matplotlib.pyplot as plt
points = np.random.rand(10, 2)
hull = ConvexHull(points)
plt.plot(points[:, 0], points[:, 1], 'o')
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'k-')
plt.show()
输出:
示例 4:KPTrees
kd-tree 是一种快速的最近邻查找。并且 Kdtree() 方法返回 kd-tree 对象
蟒蛇3
from scipy.spatial import KDTree
points = np.random.rand(10, 2)
kdtree = KDTree(points)
result = kdtree.query((1, 1))
print(result)
输出:
(0.5144859720297681, 9)