一、总结
一句话总结:
矩阵乘法就是按照矩阵相乘的规律,一步步来做的,也就是拿矩阵a的每一行乘以矩阵b的每一列,并且把矩阵a的每一行里面的每一个元素都和矩阵b里面每一列的每一个元素都一一相乘
Matrix multiply(Matrix a,Matrix b){ Matrix ans; ans.row=a.row; ans.column=b.column; //遍历矩阵a的每一行 for(int i=1;i<=a.row;i++){ //遍历矩阵b的每一列 for(int j=1;j<=b.column;j++){ //把矩阵a的每一行里面的每一个元素都和矩阵b里面每一列的每一个元素都一一相乘 for(int k=1;k<=a.column;k++){ ans.v[i][j]+=a.v[i][k]*b.v[k][j]; } } } return ans; }
二、矩阵乘法
博客对应课程的视频位置:2、矩阵乘法
https://www.fanrenyi.com/video/30/281
1 /* 2 3 矩阵的乘法在算法中有很多应用, 4 比如直接考矩阵的乘法,比如用矩阵优化递推表达式等等 5 6 7 矩阵a*矩阵b 要满足矩阵a的列等于矩阵b的行 8 最后乘出来的矩阵的行为矩阵a的行 9 列为矩阵b的列 10 11 总结: 12 矩阵乘法就是按照矩阵相乘的规律,一步步来做的 13 也就是拿矩阵a的每一行乘以矩阵b的每一列, 14 并且把矩阵a的每一行里面的每一个元素都和矩阵b里面每一列的每一个元素都一一相乘 15 16 17 矩阵a 18 1 2 3 19 4 5 6 20 21 矩阵b 22 1 2 23 3 4 24 5 6 25 26 27 1*1+2*3+3*5 28 29 */ 30 31 #include <iostream> 32 #include <cstring> 33 using namespace std; 34 35 struct Matrix{ 36 int row,column; 37 int v[5][5]; 38 Matrix(){ 39 memset(v,0,sizeof(v)); 40 } 41 }; 42 43 Matrix multiply(Matrix a,Matrix b){ 44 Matrix ans; 45 ans.row=a.row; 46 ans.column=b.column; 47 //遍历矩阵a的每一行 48 for(int i=1;i<=a.row;i++){ 49 //遍历矩阵b的每一列 50 for(int j=1;j<=b.column;j++){ 51 //把矩阵a的每一行里面的每一个元素都和矩阵b里面每一列的每一个元素都一一相乘 52 for(int k=1;k<=a.column;k++){ 53 ans.v[i][j]+=a.v[i][k]*b.v[k][j]; 54 } 55 } 56 } 57 return ans; 58 } 59 60 int main(){ 61 Matrix a,b,ans; 62 a.row=2;a.column=3; 63 b.row=3;b.column=2; 64 65 a.v[1][1]=1;a.v[1][2]=2;a.v[1][3]=3; 66 a.v[2][1]=4;a.v[2][2]=5;a.v[2][3]=6; 67 68 b.v[1][1]=1;b.v[1][2]=2; 69 b.v[2][1]=3;b.v[2][2]=4; 70 b.v[3][1]=5;b.v[3][2]=6; 71 72 ans=multiply(a,b); 73 74 cout<<ans.v[1][1]<<endl; 75 76 return 0; 77 }