加减
加减需要同样尺寸才可以。
a := mat.NewDense(3, 3, []float64{
1, 2, 3,
4, 5, 6,
7, 8, 9})
b := mat.NewDense(3, 3, []float64{
8, 8, 8,
8, 8, 8,
8, 8, 8})
var c mat.Dense
c.Add(a, b)
fmt.Printf("%v\n\n", mat.Formatted(&c))
c.Sub(a, b)
fmt.Printf("%v\n\n", mat.Formatted(&c))
输出
⎡ 9 10 11⎤
⎢12 13 14⎥
⎣15 16 17⎦
⎡-7 -6 -5⎤
⎢-4 -3 -2⎥
⎣-1 0 1⎦
乘法
假设有矩阵和矩阵, 那么 能够与相乘的前提是的列数等于行数。
图中有3列,那么就必须有3行两者才能相乘。至于的行数和的列数则不影响。
即:如果为 ,那么 必须是 的形式,的结果是一个 矩阵。
参考: 矩阵乘法
例子:
a := mat.NewDense(2, 3, []float64{
1, 2, 3,
4, 5, 6})
b := mat.NewDense(3, 2, []float64{
6, 8,
6, 8,
6, 8})
var c mat.Dense
c.Mul(a, b)
fmt.Printf("%v\n\n", mat.Formatted(&c))
结果
⎡ 36 48⎤
⎣ 90 120⎦
逆矩阵
- 矩阵一定要是"方形" (行和列数目相同)才能有逆矩阵。
- 行列式不能是零 (不然便要除以零了)
除法
两个数相除,有意义须得。这个条件在矩阵的时候就是须得可逆。
矩阵的除法不是直接放在分数线上计算的,而是要引入一个新的概念“逆矩阵”,例如矩阵的逆矩阵为,则有
比如我们有这样一个问题要解决:
有一个几个家庭组团出去旅行,出发的时候是乘坐大巴,每位儿童3元,每个大人3.2元,一共花费了118.4元。
在回程时,他们选择乘坐火车,每名儿童3.5元,每名成人3.6元,总计135.20元。
那问题来了,这里边有多少个小孩和大人呢?
虽然这道题用线性方程组来解很简单,但这次我们尝试用矩阵思维来解答。
相关的计算代码:
a := mat.NewDense(1, 2, []float64{
118.4, 135.2})
b := mat.NewDense(2, 2, []float64{
3, 3.5,
3.2, 3.6})
var c mat.Dense
c.Inverse(b) // 先求逆矩阵
fmt.Printf("%v\n\n", mat.Formatted(&c))
var d mat.Dense
d.Mul(a, &c) // 与逆矩阵相乘
fmt.Printf("%v\n\n", mat.Formatted(&d))
输出结果:
⎡ -9 8.75⎤
⎣ 8 -7.5⎦
[15.999999999999773 22.000000000000114]
一共有16个孩子和22个大人。
参看 逆矩阵的最通俗解析
参考:
- 基准的矩阵操作请看:gonum矩阵操作1
- 初探 GoNum
标签:
gonum
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2016-04-27 Go 支持Protocol Buffers的配置
2013-04-27 Golang的锁和线程安全的Map
2013-04-27 通过远程终端后台运行程序
2012-04-27 OpenGL ES 投影变换 Projection
2012-04-27 Android平台下OpenGL初步
2012-04-27 Must use a native order direct Buffer
2010-04-27 where 命令一个快速定位工具所在的功能