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
删除部分测试性代码突出重点
补充现有的网络资源的实现方案