本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。
- 《动手学机器人学》第一节:数学基础–矩阵
- 《动手学机器人学》第二节:MiniConda、JupyterNotebook与ROS2
- 《动手学机器人学》第三节:动手学数学基础,使用NumPy操作矩阵
- 《动手学机器人学》第四节(上):位姿描述
- 《动手学机器人学》第四节(下):一文搞懂坐标变换
- 《动手学机器人学》第五节(上):动手学空间姿态描述与变换
- 《动手学机器人学》第五节(中):使用ROS2的TF2进行坐标变换
- 《动手学机器人学》第五节(下):使用Python操作TF
- 更新中…欢迎关注小鱼公众号鱼香ROS,第一时间获取更新
上一节我们安装好了MiniConda和Jupyter,本节课我们继续回到学习机器人学的路上来。本节可我们通过来学习使用一个矩阵库Numpy,并且通过numpy将我们第一节学习到的矩阵相关计算一一实现。
1.NumPy是什么NumPy
是一个功能强大的Python
库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical
和Python
。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。
通过这个库我们可以非常简单的完成矩阵的创建、矩阵的计算、不管是二维还是多维都非常的easy
.
NumPy可以使用在以下场景:
-
机器学习模型: 在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。
-
图像处理和计算机图形学: 计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
-
数学任务: NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。
我们尝试在单元格内导入numpy,如果报错说明你没有安装
import numpy as np
在conda环境中安装非常的简单,也是一句话的事,在单元格内输入下面的代码,然后
Shift+Enter
执行即可。
注意指令前面有一个!,感叹号代表我们输入的是一句命令行
!pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,再次导入就不会报错了。
导入完成之后我们就可以通过numpy来创建矩阵。
numpy中有矩阵和数组两个概念,数组比矩阵更加灵活
3.1 创建单位矩阵创建一个3*3的零矩阵。
np.identity(3)
创建一个3*3的单位矩阵。
np.zeros([3,3])
创建一个3*3的随机矩阵。
np.random.rand(3,3)
假设我们已经有了数据,我们想创建一个矩阵怎么办呢?
比如我们创建一个2*2的矩阵,矩阵的数据分别是[1,2,3,4]。
我们可以通过reshape改变矩阵的形状,这里我们把矩阵变成了2*2的样子。
np.asarray([1,2,3,4]).reshape(2,2)
numpy的allclose方法,比较两个array是不是每一元素都相等,默认在1e-05的误差范围内。
我们做一个测试:
print("零矩阵和单位矩阵",np.allclose(np.zeros([3,3]),np.identity(3)))
print("单位矩阵和单位矩阵",np.allclose(np.identity(3),np.identity(3)))
计算矩阵我们主要对第一节中的矩阵算法进行验证。
4.1 矩阵加法/减法加法使用np.add
,减法np.subtract
A = np.asarray([1,2,3,4]).reshape(2,2)
B = np.zeros(2)
print(np.add(A,B))
乘法使用np.dot
(前提同形)任何矩阵乘上零矩阵等于零矩阵,任何矩阵乘上单位矩阵等于其本身
A = np.asarray([1,2,3,4]).reshape(2,2)
B = np.zeros([2,2])
C = np.identity(2)
print(np.dot(A,B))
print(np.dot(A,C))
矩阵求逆使用np.linalg.inv
矩阵的逆与矩阵的乘积为单位矩阵
A = np.asarray([1,2,3,4]).reshape(2,2)
A_INV = np.linalg.inv(A)
print(A_INV)
print(np.dot(A,A_INV))
需要注意的是,并不是所有的矩阵都有逆,比如零矩阵就没有逆,如果尝试用numpy
来求逆则会出现错误
O = np.zeros(2)
O_INV = np.linalg.inv(O)
矩阵转置在矩阵后使用.T
即可
A = np.asarray([1,2,3,4]).reshape(2,2)
A.T
今天一起学习了下numpy操作矩阵,还有更多的资料可以在公众号后台回复numpy获取,我们下节见~
技术交流&&问题求助:
- 微信公众号及交流群:鱼香ROS
- 小鱼微信:AiIotRobot
- QQ交流群:139707339
- 版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划
我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚 初中学习编程,高中开始接触机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金) 目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小鱼,一起交流技术,学习机器人