矩阵转置

深度解析卡尔曼滤波在IMU中的使用

泪湿孤枕 提交于 2019-12-01 21:52:13
卡尔曼滤波主要分两个步骤,预测加校正。预测是基于上一时刻的状态对当前状态进行估计,校正是根据当前状态的观测与上一时刻的估计进行综合分析,估计出系统的最优状态值,然后下一时刻接着重复这个过程;卡尔曼不断的进行迭代,它不需要大量的粒子状态输入,只需要过程量,因此它的速度很快,非常适合线性系统的状态估计。 众所周知卡尔曼滤波在处理 IMU 传感器数据融合中作用巨大,但在实际实现起来并非那么容易;本文从 MPU6050 入手,分析卡尔曼滤波的使用。 本篇文章需要你在夜深人静的时候、先去冲一杯咖啡、准备一张纸、一支笔…… 卡尔曼滤波 从来没有坐下来认真的计算卡尔曼滤波的公式由来以及它背后更深层次的原理,为什么在处理加速度以及陀螺仪的数据融合中卡尔曼滤波就那么的有效。但是对于大多数人来说,可能更感兴趣的是如何正确的去使用它,卡尔曼滤波的那五个公式到底怎么使用。 开始之前需要你具备一定的矩阵乘法、矩阵变换等知识,大家都知道矩阵乘法的重要性,不夸张的说,不懂矩阵乘法根本做不了复杂的模型。当然本篇涉及到的矩阵乘法没那么复杂,如果忘记了请翻大学时的课本脑补,或参考以下网站: http://en.wikipedia.org/wiki/Matrix_multiplication#Matrix_product_.28two_matrices.29 http://www.mathwarehouse.com

numpy学习总结

余生颓废 提交于 2019-12-01 20:21:49
numpy用法 导入: import numpy as np 生成矩阵: array = np.array([[1,2,3],[4,5,6]]) 矩阵维度: array.ndim 矩阵形状: array.shape 矩阵大小: array.size 矩阵元素类型: array.dtype 创建array a = np.array([1,2,3], dtype=np.int32) dtype:指定数据类型 矩阵维度:创建时方括号的层数代表矩阵的维度 常用用法 zero = np.zeros((2, 3)) 生成两行三列全为0的矩阵 one = np.empty((2, 3)) 生成两行三列全为1的矩阵 empty = np.empty((3, 2)) 生成三行两列全为接近于0但不是0的矩阵 e = np.arange(10) 此种用法与python中的range类似 h = np.arange(10).reshape(2, 4) 重新定义矩阵的形状 矩阵操作(要求:两个矩阵形状相同) arr1:矩阵1 arr2:矩阵2 加法:arr1 + arr2 按位相加 减法:arr1 - arr2 按位相减 乘法:arr1 * arr2 按位相乘 求幂:arr1 ** arr2 ****按位操作**** 除法:arr1 / arr2 按位相除 取余:arr1 % arr2 按位取余 取整

matlab学习笔记10 一般运算符

跟風遠走 提交于 2019-12-01 18:28:01
一起来学matlab-matlab学习笔记10 10_1一般运算符 觉得有用的话,欢迎一起讨论相互学习~ Follow Me 参考书籍 《matlab 程序设计与综合应用》张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷 《MATLAB技术大全》葛超等编著 感谢葛老师的书籍,让我领略到matlab的高效 MATLAB语言以前是一种专门为进行矩阵计算所设计的语言,在以后的各个版本中逐步扩充其各种功能。现在MATLAB不仅仅局限于矩阵计算领域,但其最基本、最重要的功能还是进行实数矩阵和复数矩阵的运算。 在MATLAB中几乎所有的运算符和操作符都是以矩阵为基本运算单元的,这和其他计算机语言有很大不同,这也是MATLAB的重要特点 运算符 矩阵的逆 INV(X) 矩阵的转置 X' 矩阵的加减法 其基本形式为X+-Y,X和Y必须是同维度的矩阵,此时各对应元素相加减。如果X与Y的维数不同,则MATLAB将给出错误信息,提升用户两个矩阵的维数不匹配 X=[2 3; 4 5]; Y=[3 4; 4 3]; X+Y X-Y ans = 5 7 8 8 ans = -1 -1 0 2 矩阵的乘法 X*Y是两个矩阵X和Y的乘积,其中X和Y必须满足矩阵相乘的条件,即矩阵X的列数必须等于矩阵Y的行数。如果其中一个为1x1矩阵也合法,此时便是将每一个矩阵的元素都分别与这个数值相乘。 X=[2 3;

机器学习中的数学知识

不想你离开。 提交于 2019-12-01 15:31:55
复习过程中遇到的一些机器学习中与数学相关的知识,总结于此 线性代数中的基础知识 设A是n阶矩阵,如果数和n维非零列向量x式关系式 成立,那么,这样的数称为矩阵A的特征值,非零向量x称为A的对应于特征值的特征向量 特征值分解 对于一个方阵,可以将其表现为如下形式: 可以将A分解为如下形式: 特征值分解后,分解得到的矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的前N个特征向量,对应了这个矩阵最重要的N各变化方向。利用这前N个变化方向就可以近似 大专栏 机器学习中的数学知识 这个矩阵。 特征值分解最大的局限就是变换矩阵必须是方阵 SVD分解 奇异值分解是一个能适合任意矩阵的一种分解方式: 假设A是一个N M的矩阵,那么得到的U是一个N N的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个N M的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量) 关于SVD求解,比如如下: 参考 同济大学《线性代数》第五版 强大的矩阵奇异值分解及其应用 来源: https://www.cnblogs.com/wangziqiang123/p/11690851.html

numpy学习

南楼画角 提交于 2019-12-01 08:37:37
NumPy是Python的一种开源的数值计算库。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。 1.导入numpy,创建矩阵,查看维数,形状,大小 2.numpy的创建 创建3行4列0矩阵 3行4列全1矩阵 类似range,生成,并且reshape 从1到10生成5个线段 3.numpy基础运算 array相减 平方 三角函数 判断数大小 矩阵运算 定义矩阵 矩阵乘法 创建随机数,并求元素和,最大元素,最小元素 索引 平均值 中位数 前n位累加(n=1,2,……) 每一行的累差 排序(每行) 非0值 矩阵转置 clip 4.numpy索引 for循环输出每一行 (列) 循环输出每一项 5.numpy合并 合并1 数列加维度 合并2 合并3 6.numpy分割 相等分割 不等分割 分割2 7.numpy深浅拷贝 直接=是浅拷贝 深拷贝 来源: https://www.cnblogs.com/sclu/p/11663901.html

稀疏矩阵转置+快速转置

风格不统一 提交于 2019-12-01 07:28:23
稀疏矩阵转置 Description 稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。 矩阵转置就是将矩阵行和列上的元素对换。 现在就请你对一个稀疏矩阵进行转置。以下是稀疏矩阵转置的算法描述: 图:稀疏矩阵转置的算法描述 Input 输入的第一行是两个整数r和c(r*c <= 12500),分别表示一个包含很多0的稀疏矩阵的行数和列数。接下来有r行,每行有c个整数,表示这个稀疏矩阵的各个元素。 Output 输出c行,每行有r个整数,每个整数后跟一个空格。该结果为输入稀疏矩阵的转置矩阵。 Sample Input 6 7 0 12 9 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 14 0 0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 -7 0 0 0 Sample Output 0 0 -3 0 0 15 12 0 0 0 18 0 9 0 0 24 0 0 0 0 0 0 0 -7 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 HINT 提示: 严老师纸质书中用 union 类型来表示稀疏矩阵类型,这是有问题的,应该使用 struct

行逻辑链接的矩阵乘法

我怕爱的太早我们不能终老 提交于 2019-12-01 07:28:12
Description 对于一个稀疏矩阵,当需要频繁的随机存取任意一行的非零元时,则需要知道每一行的第一个非零元在三元组表中的位置。为此,可以将算法5.2中用来指示“行”信息的辅助数组cpot固定在稀疏矩阵的存储结构中。这种“带行链接信息”的三元组表即为行逻辑链接的顺序表。其类型描述如下: 针对存储于行逻辑链接顺序表的稀疏矩阵,其矩阵相乘的算法与经典算法有所不同。因此,对于两个稀疏矩阵相乘(Q=M×N)的过程可以大致描述如下: 请使用行逻辑链接的顺序表实现两个稀疏矩阵的乘法。 Input 输入的第一行是两个整数r1和c1(r1<200, c1<200, r1*c1 <= 12500),分别表示一个包含很多0的稀疏矩阵的行数和列数。接下来有r1行,每行有c1个整数,用空格隔开,表示第一个稀疏矩阵的各个元素。 之后的一行有两个整数r2和c2(c1=r2<200, c2<200, r2*c2 <= 12500),分别表示一个包含很多0的稀疏矩阵的行数和列数。接下来有r2行,每行有c2个整数,用空格隔开,表示第二个稀疏矩阵的各个元素。 Output 输出两个矩阵的乘积。输出共有r1行,每行有c2个整数,每个整数后输出一个空格。请注意行尾输出换行。 Sample Input 4 5 0 0 0 69 78 0 0 5 0 0 0 0 0 0 0 0 91 2 0 82 5 6 0 18 0

some code about numpy

烂漫一生 提交于 2019-11-30 22:23:11
import numpy as np np.__version__ #版本 #由于python的list不要求存储同样的类型,但是效率不高。 L = [i for i in range(10)] L[5] = "Asuka" #而调用array的效率相比更好,但是它没有将数据当做向量或者矩阵,不支持基本运算,会报错。 #建议用numpy中的array nparr = np.array([i for i in range(10)]) nparr[5] = 100.0 #整数可以换成浮点型 nparr.dtype #数据类型 np.zeros(10) #0向量 np.zeros(10, dtype=float) np.zeros((3, 5)) #0矩阵 np.zeros(shape=(3, 5), dtype=int) np.ones(10) #单位向量 np.ones((3, 5)) #单位矩阵 np.full((3, 5), 666) #填充666 np.full(fill_value=666, shape=(3, 5)) np.arange(0, 20, 2) # 2为step,而且与range相比,是可以用小数的 np.arange(0,10,1.5) np.linspace(0, 20, 11) #等分 np.random.randint(0, 10) #0

向量、矩阵几何意义

主宰稳场 提交于 2019-11-30 20:03:40
向量 点 - 标量 scalar 描述二维、三维空间一个点的坐标。例如点 a(a x , a y ) 或 a(a x , a y , a z ) 向量 - 矢量 (vector) 方向 (direction) 模 (magnitude ,俗称长度 ) 的有向线段 例如 a (a x , a y ) 或 a (a x , a y , a z ), 那这与点有什么区别呢? ( 加 粗 的区别 ) 单位向量 - 归一化运算 normalized vector 对 a (a x , a y ) 归一化运算 = 向量运算 - 加法 ( 向量对向量 ) 加法可以求两向量的半角向量 设向量 a = (a x , a y , a z ) ,向量 b = (b x , b y , b z ) , 向量 c c = a + b = (a x , a y , a z ) + (b x , b y , b z ) = (a x + b x , a y + b y , a z + b z ) 平行四边形法则: 三角形法则:首尾相连 ( 谁在前谁就是结果向量起始点 ) 向量运算 - 减法 ( 向量对向量 ) 向量减法可以求两个向量的相对偏移距离。 例如点 b 相对于点 a 的偏移距离 谁在后谁就是结果向量起始点 c = b – a , 再对 c 取模运算就可得到二者间的距离 向量运算 - 向量乘法 向量与标量

【Unity Shader】---数据类型和关键字

吃可爱长大的小学妹 提交于 2019-11-30 18:03:34
推荐: https://www.cnblogs.com/nanwei/p/7277417.html 上面链接作者的整个系列都写的不错 https://www.cnblogs.com/nanwei/category/1025420.html 【Unity Shader】---数据类型和关键字 一、基本数据类型: Cg支持7种基本的数据类型 1、float,32位浮点数据,一个符号位。浮点数据类型被所有的图形接口支持; 2、half,16位浮点数据; 3、int,32位整形数据 4,fixed,12位定点数, 5、bool,布尔数据,被所有的图形接口支持; 6、sampler*,纹理对象的句柄,分为sampler、sampler1D、sampler2D、sampler3D、samplerCUBE和samplerRECT。 二、内置的数据类型 基于基础数据类型,如float3,表示float类型的三维向量;同理,bool2表示布尔类型的二维向量。 注:向量最长不能超过四元,如float5 vector;//编译错误 向量的赋值:     float2 a=float(1.0,1.0); //编译通过 float2 a=float(1.0f,1.0f); //编译错误 float3 b=float(a,0.0); //编译通过 矩阵数据类型:     float1X1 m1; /