矩阵相乘的算法

  • 格式:pdf
  • 大小:64.37 KB
  • 文档页数:1

矩阵相乘的算法

很久没写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列的矩阵。

算法:

1 //矩阵相乘

2 public static float[][] Mul(float[][] a, float[][] b) {

3 //确保矩阵a的列数和b的⾏数相等

4 if(a[0].length != b.length) {

5 return null;

6 }

7 //⽤来存放结果的矩阵,axb的结果为a的⾏数和b的列数

8 float[][] result = new float[a.length][b[0].length];

9 //对a的每⾏进⾏遍历

10 for(int i=0; i

11 //对b的每列进⾏遍历

12 for(int j=0;j

13 //c为每⼀个点的值

14 float c = 0;

15 //第i⾏j列的值为a的第i⾏上的n个数和b的第j列上的n个数对应相乘之和,其中n为a的列数,也是b的⾏数,a的列数和b的⾏数相等

16 for(int k=0; k

17 c += (a[i][k]*b[k][j]);

18 }

19 result[i][j] = c;

20 }

21 }

22 return result;

23 }

代码注释的很清楚了,主要是抓住定义,3个for循环。如果你的⼆维数组不是float类型,可以相应的更改,记得将c和返回值⼀并更改。

就到这⾥吧。