矩阵

矩阵操作(数据,数组向量,表格)

余生颓废 提交于 2020-03-11 10:07:15
一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; A=[1 2 3 4 5; 12 12 14 56 657; 23 46 34 67 56 ]; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 linspace(1,5,8) ans = 1 至 5 列 1.0000 1.5714 2.1429 2.7143 3.2857 6 至 8 列 3.8571 4.4286 5.0000 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand(

最优化——线性规划之单纯形法

与世无争的帅哥 提交于 2020-03-11 02:52:48
单纯形法(主要参考其它博客) 需要先了解的基本知识:基矩阵,基变量,非基矩阵,非基变量,矩阵分块,逆矩阵,基解,基可行解。 1、这篇讲细致一些(注意:文中IX.解基变量处有个错误,公式推导时是左乘B逆) 点这里 2、这篇简洁明了一些(注意:文中5.1几何意义部分有个错误,说基变量可以用非基变量表示,然后令非基变量为零即可求出基变量的解,应该是选取m个非基变量,写成了选取m个基变量) 点这里 3、这篇极致精简(有一定基础的看 Q∪Q) 点这里 来源: CSDN 作者: 我在人间凑人数 链接: https://blog.csdn.net/weixin_43901214/article/details/104756239

P3390 矩阵快速幂

柔情痞子 提交于 2020-03-10 12:55:08
这个题根据题目也就能知道应该怎么做,但是代码怎么实现矩阵乘法,是一个问题,所以就用到了重载运算符。 重载运算符可以定义一些普通的运算,比如 + ,-,×,÷,%,<,>,!=,……有很多,但不能自己创造符号。 在这个题中,需要定义矩阵乘法,在定义之前,还要定义一个结构体: 1 struct hls{ 2 long long s[110][110]; 3 }; 4 hls t,r; 5 long long k; 6 int n; 7 const long long m=1000000007; 8 hls operator * (const hls &a,const hls &b) 9 { 10 hls w; 11 for(int i=1;i<=n;++i) 12 { 13 for(int j=1;j<=n;++j) 14 { 15 w.s[i][j]=0; 16 } 17 } 18 for(int x=1;x<=n;++x) 19 { 20 for(int y=1;y<=n;++y) 21 { 22 for(int z=1;z<=n;++z) 23 { 24 w.s[x][y]+=a.s[x][z]*b.s[z][y]%m; 25 w.s[x][y]%=m; 26 } 27 } 28 } 29 return w; 30 } 结构体中包含一个二维数组,用来表示矩阵

python 备忘_矩阵相关

时光怂恿深爱的人放手 提交于 2020-03-10 05:06:45
1. python中矩阵合并、拼接、组合 >> > a = np . array ( [ 1 , 2 , 3 ] ) >> > b = np . array ( [ 2 , 3 , 4 ] ) >> > np . stack ( ( a , b ) ) array ( [ [ 1 , 2 , 3 ] , [ 2 , 3 , 4 ] ] ) >> > >> > np . stack ( ( a , b ) , axis = - 1 ) array ( [ [ 1 , 2 ] , [ 2 , 3 ] , [ 3 , 4 ] ] ) 2. array[n-1,:] 取数组的第n行 array[:,n-1] 取数组的第n列 array[:,0:3] 取数组的1到3列 np.ones((n, 1)) 生成一个n行1列的矩阵,数组元素全是1,用在T@point_cloud(np.hstack来造矩阵,满足矩阵相乘条件) 3. np.array和np.matrix的差别, np.array([1,2,3])这种不是矩阵, np.array([[1, 2, 3]]) 和 np.matrix(1, 2, 3) 才是矩阵,有shape np.array和np.matrix的差别 来源: CSDN 作者: Ka. 链接: https://blog.csdn.net/guaiderzhu1314

矩阵树定理

╄→尐↘猪︶ㄣ 提交于 2020-03-10 03:28:31
今天学习了矩阵树定理,就是求解无向图最小生成树个数的一个东西 首先需要构造无向图的基尔霍夫矩阵,我们记为矩阵K。矩阵K满足, K = D − A K = D - A K = D − A 其中D是这个无向图的度数矩阵,在对角线上值是每个点的度数,其他位置的值都是0,A是这个无向图的出入度矩阵,第 i i i 行 j j j 列元素表示点 i i i 到点 j j j 之间的边数 这个矩阵 K K K ,随意选择下标相同的一行一列挖去,那么剩下的行列式的值就是这个无向图的最小生成树个数。 行列式具有以下性质(针对行,列同理) 交换任意两行,行列式的值乘-1 如果任意两行相同,行列式的值为0 行列式中某一行的系数可以提取到行列式外 行列式中,某一行可以表示成两个数相加的形式,那么可以从这一行拆开,行列式的值就是拆分后两个行列式的和 行列式对应矩阵做第三类初等变换,某一行乘k加到另一行,行列式的值不变 通过这些性质,我们知道了行列式的值可以使用高斯消元来求解 P4111 [HEOI2015]小 Z 的房间 这是一个矩阵树的模板题,按上述的方式建图,并且最后注意高斯消元求解行列式的时候,我们需要取mod,因此我们要使用辗转相除的方法来完成一次消元,因此整体的时间复杂度 O ( n m 2 l o g ( n ) ) O(nm^2log(n)) O ( n m 2 l o g ( n ) )

numpy中的np.c_和np.r_解释

五迷三道 提交于 2020-03-09 13:58:12
numpy中的np.c_和np.r_解释 np.c_和np.r_用于连接两个矩阵 np.r_ : 是按行叠加两个矩阵,也可以说是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat()。 np.c_ : 是按列叠加两个矩阵的意思,也可以说是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的merge()。 示例: import numpy as np a = np . array ( [ 1 , 2 , 3 ] ) . reshape ( 1 , 3 ) b = np . array ( [ 4 , 5 , 6 ] ) . reshape ( 1 , 3 ) print ( a . shape , b . shape ) > ( 1 , 3 ) ( 1 , 3 ) print ( "a=" , a , "b=" , b ) > a = [ [ 1 2 3 ] ] b = [ [ 4 5 6 ] ] c = np . c_ [ a , b ] print ( "np.c_[a,b]:\n" , c ) > np . c_ [ a , b ] : [ [ 1 2 3 4 5 6 ] ] print ( c . shape ) > ( 1 , 6 ) d = np . r_ [ a , b ] print ( "np.r_[a

卷积的实现原理

筅森魡賤 提交于 2020-03-09 13:48:02
卷积的实现原理 特征图作为矩阵乘法的右元 特征图作为矩阵乘法的左元 总结   我前面的一篇文章中, 卷积操作的计算量 分析中,引用了矩阵相乘来概括卷积的计算量,这样做确实是有道理的,因为在 卷积的实现中的确是通过矩阵相乘来加速卷积的计算。 但是我在那篇文章只是简单的通过矩阵相乘来简单的分析了一下维度信息,事实上,各种框架的实现也并不一定符合我的分析,但是殊途同归。   本文将为大家耐心整理了一下具体的实现( 吐槽一下干这件事确实花了我相当多的功夫,因为网上写的东西太乱了,很多人都搞错了框架和实现的对应。再或者是自己的分析和配图不符,或者是自己实现后一运行,单通道对了,多通道就错了 。)   首先也是从最容易错的地方,通道这个概念说起,大体目前的框架实现卷积的时候,特征图格式分为两种,一种是 N ∗ C ∗ H ∗ W N*C*H*W N ∗ C ∗ H ∗ W ,即N表示batchsize中特征图的数量,C表示通道数,H,W表示每个特征图的长宽。一种是 N ∗ H ∗ W ∗ C N*H*W*C N ∗ H ∗ W ∗ C ,与第一种的区别在于通道的位置不一样。首先通道的位置决定了一个通道是否连续的问题,连续的利于访问局部性,可以提高速度。另一个差异决定了决定了矩阵乘法的结果形状转化有区别。   另外一处区别就在于,那就是矩阵乘法操作的特征图作为左元和右元的区别。这句话怎么理解

线性代数(四)置换,转置,向量空间

让人想犯罪 __ 提交于 2020-03-09 08:39:50
置换矩阵P 置换矩阵(permutations)P是行重新排列了的单位矩阵。对于n×n的矩阵来说一共有n!种行变换的形式。所有的置换矩阵均是可逆的。 在求矩阵的逆,解方程组Ax=b,这些情况下如果出现主元位置为0的时候,就需要使用行互换。 A=LU,其中L为下三角矩阵,U为上三角矩阵。 P-1 = PT ,PTP = I P矩阵的转置乘以本身等于单位矩阵。 转置矩阵 转置(transpose)记作T,一个3行2列的矩阵,他的转置矩阵为2行3列,且(AT)ij = Aji。 对称矩阵 对称矩阵(symmetric matrices),一个矩阵为对称矩阵意味着它经过转制之后该矩阵没有变化。AT=A。 一个矩阵乘以他的转置矩阵,得到的矩阵一定是对称矩阵。RTR is always symmetric。 但是为什么呢? 我们利用定义来证明(RTR)T = RTRTT = RTR,注意这里的矩阵的转置的转置是原矩阵。验证完毕。 向量空间 向量空间(Vector Spaces) 举个例子,R2称为一个平面有所有的2维向量组成的向量空间。为了防止在运算过程中超出向量空间的范围,向量空间必须对数乘和加法两种运算是封闭的或者说对线性组合封闭。R2的子空间必须是过原点的线段,也可以是它本身。第三种R2的子空间是零向量。 这里没听太明白。。。 来源: CSDN 作者: CZZ_CS 链接: https:

二次规划及qpoases简要介绍

≯℡__Kan透↙ 提交于 2020-03-09 07:03:48
qpoases 这个库函数本来被设计来作为MPC的应用,但是也是一个可靠的QP算法求解方案。作为求解参数二次规划的有效集算法。 使用说明书 QP问题 二次规划问题 带有二次型目标函数和约束条件的最优化问题。 基础概念 二次型:函数中最高次为2次的函数。用矩阵可以记为 f = x T ⋅ A ⋅ x f=x^T \cdot A \cdot x f = x T ⋅ A ⋅ x ; 正定矩阵 Positive Definite Matrix:,设在二次型 f = x T ⋅ A ⋅ x f=x^T \cdot A \cdot x f = x T ⋅ A ⋅ x 中,对于任何 x ≠ 0 x\ne0 x  ​ = 0 ,都有 f ( x ) > 0 f(x)>0 f ( x ) > 0 ,称 f f f 为正定二次型,称对称矩阵A为正定的;如果对于任何 x ≠ 0 x\ne0 x  ​ = 0 ,都有 f ( x ) < 0 f(x)<0 f ( x ) < 0 ,称 f f f 为负定二次型,称对称矩阵A为负定的。 Hesse矩阵(海塞矩阵):常用于牛顿法解决最优化问题。是一个类似与雅可比矩阵的概念,不过其是二阶导数的矩阵,但是雅可比矩阵是一阶导数的矩阵。如果函数f是连续的,则它的Hesse矩阵一定是对称阵。 得到函数f的Hesse矩阵有什么用呢?Hesse可以用于多元函数极值的判定

RDLC报表系列(四) 矩阵

泪湿孤枕 提交于 2020-03-09 06:55:50
原文: RDLC报表系列(四) 矩阵 继续接上一篇的内容,本文主要是讲矩阵的内容 用到的数据源如下: DataTable dt = new DataTable(); dt.Columns.Add("FiscalYear", typeof(string)); dt.Columns.Add("FiscalMonth", typeof(string)); dt.Columns.Add("Actual", typeof(int)); dt.Columns.Add("Budget", typeof(int)); dt.Columns.Add("RFC", typeof(int)); dt.Rows.Add("FY1314", "P10", 1000, 1000, 1000); dt.Rows.Add("FY1314", "P9", 900, 900, 900); dt.Rows.Add("FY1314", "P8", 800, 800, 800); dt.Rows.Add("FY1314", "P7", 700, 700, 700); dt.Rows.Add("FY1314", "P6", 900, 900, 900); dt.Rows.Add("FY1314", "P5", 800, 800, 800); dt.Rows.Add("FY1314", "P4", 700, 700, 700)