首页 > 其他分享 >【ROS2机器人入门到实战】矩阵运算实战

【ROS2机器人入门到实战】矩阵运算实战

时间:2023-10-31 10:32:52浏览次数:38  
标签:实战 NumPy inv 矩阵 print np numpy ROS2


3.矩阵运算实战

写在前面

  1. 当前平台文章汇总地址:ROS2机器人从入门到实战
  2. 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
  3. 教程配套机器人开发平台:两驱版| 四驱版
  4. 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn

上一节我们安装好了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

【ROS2机器人入门到实战】矩阵运算实战_NumPy

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

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

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

【ROS2机器人入门到实战】矩阵运算实战_矩阵_02

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

3.创建矩阵

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

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

3.1 创建单位矩阵

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

np.identity(3)

【ROS2机器人入门到实战】矩阵运算实战_矩阵运算_03

3.2 创建零矩阵

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

np.zeros([3,3])

【ROS2机器人入门到实战】矩阵运算实战_NumPy_04

3.3 创建随机矩阵

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

np.random.rand(3,3)

【ROS2机器人入门到实战】矩阵运算实战_NumPy_05

3.4 从已有数组创建矩阵

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

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

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

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

【ROS2机器人入门到实战】矩阵运算实战_机器人_06

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

【ROS2机器人入门到实战】矩阵运算实战_NumPy_07

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

【ROS2机器人入门到实战】矩阵运算实战_机器人_08

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

【ROS2机器人入门到实战】矩阵运算实战_机器人_09

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

【ROS2机器人入门到实战】矩阵运算实战_NumPy_10

需要注意的是,并不是所有的矩阵都有逆,比如零矩阵就没有逆,如果尝试用numpy来求逆则会出现错误

O = np.zeros(2)
O_INV = np.linalg.inv(O)

【ROS2机器人入门到实战】矩阵运算实战_矩阵_11

另外如果使用的是conda提供的numpy包,对于某些不存在逆的矩阵,并不会抛出错误。
但是对于通过pip安装的相同版本甚至更高版本的numpy,则不会出现类似问题。

""" 
numpy packages isntalled from conda:
numpy                     1.21.2           py38h20f2e39_0
numpy-base                1.21.2           py38h79a1101_0
"""
c=np.asarray([
    1,2,3,
    4,5,6,
    7,8,9,
]).reshape((3,3))

print("矩阵的行列式:",np.linalg.det(c))
print("矩阵的秩:",np.linalg.matrix_rank(c))
c_inv=np.linalg.inv(c)
print("矩阵c和c_inv点乘的结果:","\n",np.dot(c,c_inv))

【ROS2机器人入门到实战】矩阵运算实战_矩阵_12

4.4 矩阵转置

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

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

【ROS2机器人入门到实战】矩阵运算实战_数组_13

5.总结

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


标签:实战,NumPy,inv,矩阵,print,np,numpy,ROS2
From: https://blog.51cto.com/u_15473553/8102205

相关文章

  • 使用mysqldump进行数据库备份实战遇到的问题
    [root@mysql~]#mysqldump-uroot-pdb_shop>/opt/db_shop.sqlEnterpassword:mysqldump:Couldn'texecute'SHOWVARIABLESLIKE'gtid\_mode'':Table'performance_schema.session_variables'doesn'texist(1146)原......
  • 适用批处理的softmax函数的输入矩阵为什么要转置
    #适用批输入的softmax函数defSoftmax(x):ifx.ndim==2:x=x.Tx=x-np.max(x,axis=0)y=np.exp(x)/np.sum(np.exp(x),axis=0)returny.T#为什么要转置原因是Numpy数组的扩张原理是把行向量复制扩张成矩阵例子如下......
  • Django实战项目-学习任务系统-定时任务管理
    接着上期代码框架,开发第4个功能,定时任务管理,再增加一个学习定时任务表,主要用来设置周期重复性的学习任务,定时周期,定时时间,任务标题和内容,预计完成天数,奖励积分和任务状态等信息。 现实中学习一门课程或一项技能知识,需要很长时间的学习积累才能学会,不像小说世界,游戏世界等虚拟世......
  • 【java基础-实战3】list遍历时删除元素的方法
    在实际的业务开发中,容器的遍历可以说是非常非常常见的场景了,遍历删除呢,用的机会也比较多,那么有哪几种删除元素的方法呢?你用对了吗~本文循序渐进,先说几种容易出问题的方法,再引出几种比较可靠的方法~首先,初始化一个数组,用于后面的事例演示:List<Integer>list=newArrayList<>();......
  • 实战攻防演练-Linux写入ssh密钥,利用密钥登录
    前言密钥形式登录的原理是利用密钥生成器制作一对密钥,一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过SSH暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也......
  • 【matplotlib 实战】--箱型图
    箱型图(BoxPlot),也称为盒须图或盒式图,1977年由美国著名统计学家约翰·图基(JohnTukey)发明。是一种用作显示一组数据分布情况的统计图,因型状如箱子而得名。它能显示出一组数据的最大值、最小值、中位数及上下四分位数。箱子的顶端和底端,分别代表上下四分位数。箱子中间的是中位数线......
  • axios请求实战
    Home主页请求数据一、概览1.request请求2.找到合适API并传相应参数3.需要请求的组件调用4.请求方接受数据并传至展示组件二、一起看下代码吧,这里采用vue的多文件形式1.request.js文件用于创建请求实体2.home.js文件用于封装request请求实现特定页面的请求发送3.......
  • 构造矩阵
    构造矩阵我们希望构造一个$n\timesm$的整数矩阵。构造出的矩阵需满足:每一行上的所有元素之积均等于$k$。每一列上的所有元素之积均等于$k$。保证$k$为$1$或$-1$。请你计算,一共可以构成出多少种不同的满足条件的矩阵。由于结果可能很大,你只需要输出对$10^9+7$......
  • LangChain实战
    1.概述最近,在研究LangChain时,发现一些比较有意思的点,今天笔者将给大家分享关于LangChain的一些内容。2.内容2.1什么是LangChain?LangChain是一项旨在赋能开发人员利用语言模型构建端到端应用程序的强大框架。它的设计理念在于简化和加速利用大型语言模型(LLM)和对话模型构建应用......
  • 云原生架构实战04 kubeSphere 平台安装
    一、Kubernetes上安装KubeSpherehttps://kubesphere.com.cn/安装步骤选择4核8G(master)、8核16G(node1)、8核16G(node2)三台机器,按量付费进行实验,CentOS7.9安装Docker安装Kubernetes安装KubeSphere前置环境安装KubeSphere1、安装Dockersudoyumremovedocker*sudoyuminstall-yyum......