矩阵相乘的算法
2014-08-27 17:15
162 查看
很久没写blog了,感觉人都快变的抑郁了,换工作之后各种揪心,说好了是做Android的,结果让我搞各种算法,也罢,权当学习了一点知识吧。
今天说说矩阵相乘的算法,计算算法很简单,就是3个for循环。
首先还是说下矩阵相乘的概念,其实大学的时候线性代数中应该有讲到,不过到现在估计都还给老师了。
废话不多说,矩阵,其实就是一个二维数组,横竖排列的,比如int[5][6],就是一个矩阵,表示有5行6列。
只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p)。左乘:又称前乘,就是乘在左边(即乘号前),比如说,A左乘E即AE。
在计算机中,一个矩阵实际上就是一个二维数组。一个m行n列的矩阵与一个n行p列的矩阵可以相乘,得到的结果是一个m行p列的矩阵,其中的第i行第j列位置上的数为第一个矩阵第i行上的n个数与第二个矩阵第j列上的n个数对应相乘后所得的n个乘积之和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。
算法:
代码注释的很清楚了,主要是抓住定义,3个for循环。如果你的二维数组不是float类型,可以相应的更改,记得将c和返回值一并更改。
就到这里吧。
今天说说矩阵相乘的算法,计算算法很简单,就是3个for循环。
首先还是说下矩阵相乘的概念,其实大学的时候线性代数中应该有讲到,不过到现在估计都还给老师了。
废话不多说,矩阵,其实就是一个二维数组,横竖排列的,比如int[5][6],就是一个矩阵,表示有5行6列。
只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p)。左乘:又称前乘,就是乘在左边(即乘号前),比如说,A左乘E即AE。
在计算机中,一个矩阵实际上就是一个二维数组。一个m行n列的矩阵与一个n行p列的矩阵可以相乘,得到的结果是一个m行p列的矩阵,其中的第i行第j列位置上的数为第一个矩阵第i行上的n个数与第二个矩阵第j列上的n个数对应相乘后所得的n个乘积之和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。
算法:
//矩阵相乘 public static float[][] Mul(float[][] a, float[][] b) { //确保矩阵a的列数和b的行数相等 if(a[0].length != b.length) { return null; } //用来存放结果的矩阵,axb的结果为a的行数和b的列数 float[][] result = new float[a.length][b[0].length]; //对a的每行进行遍历 for(int i=0; i<a.length; i++) { //对b的每列进行遍历 for(int j=0;j<b[0].length; j++) { //c为每一个点的值 float c = 0; //第i行j列的值为a的第i行上的n个数和b的第j列上的n个数对应相乘之和,其中n为a的列数,也是b的行数,a的列数和b的行数相等 for(int k=0; k<a[0].length; k++) { c += (a[i][k]*b[k][j]); } result[i][j] = c; } } return result; }
代码注释的很清楚了,主要是抓住定义,3个for循环。如果你的二维数组不是float类型,可以相应的更改,记得将c和返回值一并更改。
就到这里吧。
相关文章推荐
- 黑马程序员____矩阵相乘常规法和Strassen方法算法分析
- 蓝桥杯 ADV-208 算法提高 矩阵相乘
- 算法提高 矩阵相乘
- 矩阵链乘法求两矩阵相乘所需的最小次数(算法3.6&3.7)
- 稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
- 矩阵相乘算法的Java语言实现
- 【算法】矩阵相乘
- 算法提高 矩阵相乘
- 算法设计 矩阵相乘 java
- 算法笔记_003:矩阵相乘问题【分治法】
- 矩阵相乘的算法
- [算法] 矩阵相乘
- 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)
- [算法] 矩阵相乘
- 两个二维矩阵相乘的算法
- 矩阵相乘的算法
- 加农算法的MPI实现 【矩阵相乘】
- 算法系列:矩阵相乘算法的MapReduce实现
- 两个矩阵相乘—Strassen算法与传统算法(要求矩阵阶n为2的幂)
- 稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结