矩阵乘法
来源:互联网 发布:软件开发工资待遇 编辑:程序博客网 时间:2024/06/05 18:45
官方定义
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义[1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。(来自百度百科)
定义
设A为 m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=A*B,其中矩阵C中的第 i 行第 j 列元素可以表示为:
如下所示:
注意事项
当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。
- 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
- 乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
基本性质
- 乘法结合律: (AB)C=A(BC).
- 乘法左分配律:(A+B)C=AC+BC
- 乘法右分配律:C(A+B)=CA+CB
- 对数乘的结合性k(AB)=(kA)B=A(kB).
- 转置 (AB)^T=B^T*A^T.
- 矩阵乘法一般不满足交换律[3] 。
Hadamard乘积
m*n矩阵 A=a[i,j] 与 m*n 矩阵B=b[i,j] 的Hadamard积记为 A*B 。其元素定义为两个矩阵对应元素的乘积 (A*B)i,j=a[i,j]*b[i,j] 的m×n矩阵 。例如,
Kronecker乘积
Kronecker积是两个任意大小的矩阵间的运算,表示为 。克罗内克积也成为直积或张量积 .以德国数学家利奥波德·克罗内克命名。计算过程如下例所示:
代码(比较伪):
struct Matrix:vector<vector<int> >//使用标准容器vector做基类,需#include语句{ Matrix(int x=0,int y=0,int z=0)//初始化,默认为0行0列空矩阵 { assign(x,vector<int>(y,z)); } int h_size()const//常量说明不可省,否则编译无法通过 { return size(); } int l_size()const { return empty()?0:front().size();//列数要考虑空矩阵的情况 } Matrix pow(int k);//矩阵的k次幂,用快速幂实现,k为0时返回此矩阵的单位矩阵};Matrix operator*(const Matrix &m,const Matrix &n)//常量引用避免拷贝{ if(m.l_size()!=n.h_size())return Matrix();//非法运算返回空矩阵 Matrix ans(m.h_size(),n.l_size()); for(int i=0; i!=ans.h_size(); ++i) for(int j=0; j!=ans.l_size(); ++j) for(int k=0; k!=m.l_size(); ++k) ans[i][j]+=m[i][k]*n[k][j]; return ans;}Matrix Matrix::pow(int k){ if(k==0) { Matrix ans(h_size(),h_size()); for(int i=0; i!=ans.h_size(); ++i) ans[i][i]=1; return ans; } if(k==2)return (*this)*(*this); if(k%2)return pow(k-1)*(*this); return pow(k/2).pow(2);}
矩阵乘法noip还没有考过 但是十分实用
如斐波那契数列也可以用矩乘来做 希望大家掌握一下!!
阅读全文
1 0
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- JavaScript学习笔记 isPrototypeOf和hasOwnProperty使用区别
- JZOJsenior3476.【NOIP2013初赛】整除
- SpringBoot使用JdbcTemplate案例(学习笔记)
- Magento -- 可配置产品的选项如何默认选中第一项
- 【数论 && 公式转换】HDU
- 矩阵乘法
- NOIP2017 模拟考试day1 2017.10.06
- 快速排序
- bzoj2086[Poi2010]Blocks 单调栈
- 一个简单的判断字符串所含字母是否有大写,并将所有字母改为大写的小程序
- tensorflow(1)
- 论文投稿需要注意哪些细节
- 翻转单词顺序列
- QWidget::paintEvent 被调用的场景