使用go语言实现矩阵加法与乘法

1 缘起

期望对于算法的理解并不停留在python api层面,使用go语言实现加深理解,回避复杂的指针操作,同时绕开冗杂的c++语法

另外,go语言的低硬件资源消耗便于移植到更廉价的芯片以降低成本,同时期望利用go的分布式特性实现大型的矩阵运算处理(如特征值问题)

同时,使用go的算法库更利于云端的调用,更便捷地编译为客户端程序(比如结合h5实现科学计算器)

2 思路

使用切片表示矩阵,优势在于函数定义时无需将矩阵宽高写死

关键点在于一维切片创建

3 实现


/**
   矩阵加法
   a b均为m行n列
 */
func addMatrix(a [][]int, b [][]int, m int, n int) [][]int {
   res := make([][]int, m)

   for i := 0; i < m; i++ {
      resI := make([]int, n)
      for j := 0; j < n; j++ {
         resI[j] = a[i][j] + b[i][j]
      }
      res[i] = resI
   }

   return res
}

/**
   矩阵乘法
   a为m行k列, b为k行n列
*/
func mulMatrix(a [][]int, b [][]int, m int, n int, k int) [][]int {
   res := make([][]int, m)
   for i := 0; i < m; i++ {
      resI := make([]int, k)
      for j := 0; j < n; j++ {
         for kk := 0; kk < k; kk++ {
            resI[kk] += a[i][j] * b[j][kk]
         }
      }
      res[i] = resI
   }
   return res
}
复制代码

4 展望

  • 科学计算器
  • 矩阵分解,分布式任务调度实现运算加速
  • 重写pandas numpy sklearn等python库
  • 移植到stm32等芯片
  • matlab的go云版

5 网络资源

可以参考其关于结构体的封装,以及模块的划分等

GO矩阵库有哪些? cloud.tencent.com/developer/a…

golang 矩阵乘法、行列式、求逆矩阵 www.cnblogs.com/zheng123/p/…

a 更新记录

======================

2021-10-15 11:00

删除部分测试性代码突出重点

补充现有的网络资源的实现方案

猜你喜欢

转载自juejin.im/post/7019111881231040549