您当前的位置: 首页 >  数学

鱼香ROS

暂无认证

  • 0浏览

    0关注

    498博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

《动手学机器人学》第三节:动手学数学基础,使用NumPy操作矩阵

鱼香ROS 发布时间:2021-10-20 10:19:45 ,浏览量:0

本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。 公众号

目录
  • 《动手学机器人学》第一节:数学基础–矩阵
  • 《动手学机器人学》第二节:MiniConda、JupyterNotebook与ROS2
  • 《动手学机器人学》第三节:动手学数学基础,使用NumPy操作矩阵
  • 《动手学机器人学》第四节(上):位姿描述
  • 《动手学机器人学》第四节(下):一文搞懂坐标变换
  • 《动手学机器人学》第五节(上):动手学空间姿态描述与变换
  • 《动手学机器人学》第五节(中):使用ROS2的TF2进行坐标变换
  • 《动手学机器人学》第五节(下):使用Python操作TF
  • 更新中…欢迎关注小鱼公众号鱼香ROS,第一时间获取更新
正文 第三节:动手学数学基础,使用NumPy操作矩阵

上一节我们安装好了MiniConda和Jupyter,本节课我们继续回到学习机器人学的路上来。本节可我们通过来学习使用一个矩阵库Numpy,并且通过numpy将我们第一节学习到的矩阵相关计算一一实现。

1.NumPy是什么

NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- NumericalPython。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。

通过这个库我们可以非常简单的完成矩阵的创建、矩阵的计算、不管是二维还是多维都非常的easy.

NumPy可以使用在以下场景:

  • 机器学习模型: 在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。

  • 图像处理和计算机图形学: 计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。

  • 数学任务: NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。

2.Numpy安装

我们尝试在单元格内导入numpy,如果报错说明你没有安装

import numpy as np

导入numpy 在conda环境中安装非常的简单,也是一句话的事,在单元格内输入下面的代码,然后Shift+Enter执行即可。

注意指令前面有一个!,感叹号代表我们输入的是一句命令行

!pip install numpy  -i https://pypi.tuna.tsinghua.edu.cn/simple

安装numpy 安装完成后,再次导入就不会报错了。

3.创建矩阵

导入完成之后我们就可以通过numpy来创建矩阵。

numpy中有矩阵和数组两个概念,数组比矩阵更加灵活

3.1 创建单位矩阵

创建一个3*3的零矩阵。

np.identity(3)

创建单位矩阵

3.2 创建零矩阵

创建一个3*3的单位矩阵。

np.zeros([3,3])

创建零矩阵

3.3 创建随机矩阵

创建一个3*3的随机矩阵。

np.random.rand(3,3)

创建一个随机矩阵

3.4 从已有数组创建矩阵

假设我们已经有了数据,我们想创建一个矩阵怎么办呢?

比如我们创建一个2*2的矩阵,矩阵的数据分别是[1,2,3,4]。

我们可以通过reshape改变矩阵的形状,这里我们把矩阵变成了2*2的样子。

np.asarray([1,2,3,4]).reshape(2,2)

从已有数据创建矩阵

3.5 判断两个矩阵是否相等

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.计算矩阵

计算矩阵我们主要对第一节中的矩阵算法进行验证。

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))

任意矩阵加上零矩阵还是其本身

4.2 矩阵乘法

乘法使用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))

矩阵乘法

4.3 矩阵求逆

矩阵求逆使用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)

零矩阵求逆

4.4 矩阵转置

矩阵转置在矩阵后使用.T即可

A = np.asarray([1,2,3,4]).reshape(2,2)
A.T

转置运算

5.总结

今天一起学习了下numpy操作矩阵,还有更多的资料可以在公众号后台回复numpy获取,我们下节见~

技术交流&&问题求助:

  • 微信公众号及交流群:鱼香ROS
  • 小鱼微信:AiIotRobot
  • QQ交流群:139707339
  • 版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划
作者介绍:

我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚 初中学习编程,高中开始接触机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金) 目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小鱼,一起交流技术,学习机器人

关注
打赏
1666092100
查看更多评论
立即登录/注册

微信扫码登录

0.0431s