scipy.spatial子模块提供了一系列用于处理和计算空间数据和几何形状的算法和工具,在许多领域都有广泛的应用,例如计算机视觉、地理信息系统、机器人学、医学影像分析等。

下面,来具体看看scipy.spatial子模块为我们提供的主要功能分类。

1. 主要功能

scipy.spatial子模块中主要包含的功能有:

类别 说明
空间变换类 目前主要是三维旋转类的函数
最近邻查询类 提供了基于树结构的最近邻搜索算法,如K-d树、球树等,用于在大型空间数据集中快速找到最近邻对象
距离度量类 提供了计算点、线、面等几何形状之间的距离的函数,包括欧几里得距离、曼哈顿距离、切比雪夫距离等。
三角剖分、凸包类 提供了计算二维数据点的凸包的函数,即找到最小的凸多边形来包含所有数据点等
单纯形表示类 提供了三维几何对象的方法,如三维点、向量、矩阵

2. 使用示例

下面演示两个用scipy.spatial子模块中的函数实现的示例。

2.1. 凸包计算示例

给定任意个点,计算凸包就是计算包含给定点集中所有点的最小凸对象。

from scipy.spatial import ConvexHull
import numpy as np
import matplotlib.pyplot as plt # 随机生成100个点
points = np.random.rand(100, 2)
# 计算这些点的凸包
hull = ConvexHull(points) # 绘制一个随机点
plt.scatter(points[:, 0], points[:, 1], marker='o')
# 将位于凸包上的点用红色线连接起来
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'r-') plt.show()

2.2. 三维旋转示例

使用scipy.spatial子模块来做三维旋转非常简单,它提了多种旋转三维物体的方法,
可以通过欧拉角轴角旋转向量四元组,以及旋转矩阵

使用方式类似,下面演示的是用欧拉角来旋转一个三维球体。
首先绘制一个球体:

import matplotlib.pyplot as plt
import numpy as np fig = plt.figure()
ax = fig.add_subplot(projection='3d') # 球面点的数据
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) ax.plot_surface(x, y, z, cmap=plt.cm.rainbow) ax.set_aspect('equal')
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z") plt.show()

然后用 scipy.spatial 中的方法分别沿X轴旋转45度沿Y轴旋转90度

from scipy.spatial.transform import Rotation

# 沿着 "axis" 轴旋转 "degree" 角度
def rotate(axis, degree):
r = Rotation.from_euler(axis, degree, degrees=True)
v = np.dstack((x, y, z))
v = r.apply(v.reshape(-1, 3))
v = v.reshape((*z.shape, 3))
return v fig, ax = plt.subplots(1, 2, subplot_kw={"projection": "3d"}) v = rotate('x', 45)
ax[0].plot_surface(v[:, :, 0], v[:, :, 1], v[:, :, 2],
cmap=plt.cm.rainbow)
ax[0].set_aspect('equal')
ax[0].set_title("沿X轴旋转45度") v = rotate('y', 90)
ax[1].plot_surface(v[:, :, 0], v[:, :, 1], v[:, :, 2],
cmap=plt.cm.rainbow)
ax[1].set_aspect('equal')
ax[1].set_title("沿Y轴旋转90度") plt.show()

3. 总结

总之,scipy.spatial子模块的重点应用领域有:
距离计算问题,通过计算点、线、面等几何形状之间的距离,可以用于图像配准、碰撞检测、空间聚类等应用;
还有空间插值方法,可以将离散的空间数据转换为连续的函数,用于图像处理、数值分析等领域;
凸包算法,用于图像处理中的对象识别、区域提取等任务;
几何形状操作方法,可以对二维或三维的几何对象进行合并、相交、相减等操作,用于计算机图形学、机器人路径规划等应用;
最近邻搜索算法,在大型空间数据集中快速找到最近邻对象,用于推荐系统、空间索引等应用;

此外,该子模块还提供了排列组合、阶乘和伽马函数等数学计算操作。

【scipy 基础】--空间计算的更多相关文章

  1. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  2. (数据科学学习手札84)基于geopandas的空间数据分析——空间计算篇(上)

    本文示例代码.数据及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在本系列之前的文章中我们主要讨论了g ...

  3. (数据科学学习手札88)基于geopandas的空间数据分析——空间计算篇(下)

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在基于geopandas的空间数据分析系列 ...

  4. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  5. Linux 64位下一键安装scipy等科学计算环境

    Linux 64位下一键安装scipy等科学计算环境 采用scipy.org的各种方法试过了,安装还是失败.找到了一键式安装包Anaconda,基本python要用到的库都齐了,而且还可以选择安装到其 ...

  6. SciPy 基础功能

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  7. Scipy教程 - 距离计算库scipy.spatial.distance

    http://blog.csdn.net/pipisorry/article/details/48814183 在scipy.spatial中最重要的模块应该就是距离计算模块distance了. fr ...

  8. Windows下安装python的scipy等科学计算包(转)

    如果要使用python进行科学计算.数据分析等,一定要安装scipy.seaborn.numpy等等包. 但Windows下安装python的第三方库经常会出现问题.此前,已介绍过Windows下如何 ...

  9. sql 基础练习 计算7天各个时间点的总和 group by order mysql一次查询多个表

    SQL 基础练习 -- 创建数据库 CREATE DATABASE school CHARACTER SET UTF8; -- 使用数据库 USE school; -- id: 学生的id -- na ...

  10. 03 . Vue基础之计算属性,组件基础定义和使用

    vue组件 fetch请求组件 fetch XMLHttpRequest是一个设计粗糙的API, 配置和调用方式非常混乱,而且基于事件的异步模型写起来不友好,兼容性不好. <!DOCTYPE h ...

随机推荐

  1. 这些年写过的花式sql - 第3句 今日流失用户

    第3句 今日流失用户 需求: 当日流失用户的定义:昨天登录的,今天没登录的用户数 有一张用户登录日志表,有字段 date_stamp(日期时间戳),用户id(uid).如果用户在某天登录了,该表会有一 ...

  2. [selenium]相对定位器

    前言 Relative Locators,相对定位器,是Selenium 4引入的一个新的定位器,相对定位器根据源点元素去定位相对位置的其它元素. 相对定位方法其实是基于JavaScript的 get ...

  3. 7.1 C++ STL 非变易查找算法

    C++ STL 中的非变易算法(Non-modifying Algorithms)是指那些不会修改容器内容的算法,是C++提供的一组模板函数,该系列函数不会修改原序列中的数据,而是对数据进行处理.查找 ...

  4. #Powerbi 1分钟学会,RANK函数,多字段排名函数.

    一:思维导图&数据源示例 1.1思维导图 1.2示例数据源 二:参数构成 三:案例度量值 基础度量值 总销量 = CALCULATE(SUM('数据源'[销量])) 总销售额 = CALCUL ...

  5. 《SQLi-Labs》01. Less 1~5

    @ 目录 前言 索引 Less-1 题解 原理 Less-2 题解 Less-3 题解 Less-4 题解 Less-5 题解 原理 sqli.开启新坑. 前言 对于新手,为了更加直观的看到 sql ...

  6. QA|conftest使用了fixture但是没生效的原因|Pytest

    conftest.py中使用了fixture但是没生效,后面发现是因为autouse默认False导致,修改后代码如下 # conftest.py @pytest.fixture(scope='ses ...

  7. 利用BGP Anycast 实现DNS 服务的高可用测试

    一.背景     根据当前某公司内部生产系统容器平台架构设计,在各生产线边缘机房部署容器平台,与数据中心容器平台形成纵向冗余,在此情况下,传统部署在数据中心机房的DNS系统成为容器平台业务服务的短板, ...

  8. HTML一键打包APK工具最新版1.9.1更新(附下载地址)

    HMTL网址打包APK,可以把本地HTML项目, Egret游戏,网页游戏,或者网站打包为一个安卓应用APK文件,无需编写任何代码,也无需配置安卓开发环境,支持在最新的安卓设备上安装运行. HTML一 ...

  9. KRPANO资源分析工具下载四方环视全景图

    提示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师 ...

  10. UM 百度富文本编辑器上传报错

    看下报错信息 这三张图记录了当时,上传图片 遇见的报错信息 最终解决方案 我把UM下jsp文件下的ueditor-mini.jar包拷贝到WEB_INF下的lib文件夹下,就成功了. maven的话把 ...