📜  scipy.spatial – 空间数据结构和算法

📅  最后修改于: 2022-05-13 01:55:27.648000             🧑  作者: Mango

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)