Octave命令及语法教程2 - 数据的计算(矩阵乘法、求逆、转置)
矩阵运算
矩阵乘法
我们先来创建三个矩阵:A、B、C:
> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
> B = [11 12; 13 14; 15 16]
B =
11 12
13 14
15 16
> C = [1 1; 2 2]
C =
1 1
2 2
A*C
:矩阵A和矩阵C相乘
> A*C
ans =
5 5
11 11
17 17
.
的使用
A .* B
: 矩阵A和矩阵C每个对应元素分别相乘
> A .* B
ans =
11 24
39 56
75 96
上面提到的.
指的是对每个元素的操作,再举个例子,对A
的每个元素平方:
> A .^ 2
ans =
1 4
9 16
25 36
再举个例子:
> v = [1; 2; 3]
v =
1
2
3
> 1 ./ v
ans =
1.00000
0.50000
0.33333
> 1 ./ A
ans =
1.00000 0.50000
0.33333 0.25000
0.20000 0.16667
log()
对每个元素进行对数运算:
> log(v)
ans =
0.00000
0.69315
1.09861
exp()
对每个元素求e^x
> exp(v)
ans =
2.7183
7.3891
20.0855
abs()
对每个元素求绝对值
> -v
ans =
-1
-2
-3
> abs(-v)
ans =
1
2
3
上面的-v
也就相当于-1 * v
,不过可以直接写成-v
组合操作
> v + ones(length(v),1)
ans =
2
3
4
ones(a,b)
就是构建一个a行b列每个元素都是1的矩阵,而length(v)
之前讲过,就是v
的行数或列数最大的那个值,在这里是3,也就相当于v + ones(3,1)
,也就是将v的每个元素都加1。当然这样操作也都是一样的结果:
> v + 1
ans =
2
3
4
> v .+ 1
ans =
2
3
4
矩阵转置
在数学上我们用上标T
表示转置,在Octave中,用'
表示:
> A
A =
1 2
3 4
5 6
> A'
ans =
1 3 5
2 4 6
而(A')'
依然是A
,或者省略括号:A''
也是可以的
max()
对于向量,返回最大的元素(以及索引)
> a = [1 15 2 0.5]
a =
1.00000 15.00000 2.00000 0.50000
> max(a)
ans = 15
> [val, idx] = max(a)
val = 15
idx = 2
对于矩阵,返回的是每一列最大的数,是一个列数x1的行向量,每个元素是所求矩阵每一列的最大值。
> F = [1 2; 3 3; 2 4]
F =
1 2
3 3
2 4
> max(F)
ans =
3 4
> [val, idx] = max(F)
val =
3 4
idx =
2 3
注意:这里[val, idx] = max(F)
类似Python中的多变量同时返回、赋值的操作,但是注意,不可像Python一样直接a, b = max(F)
,这里一定要加[
,]
。
还可以max(A,B)
比较两个矩阵相同位置的元素大小,取大的那个,最后返回一个矩阵。
A =
7 2 3
7 5 6
7 8 9
> B
B =
11 12 1
13 14 2
15 16 3
> max(A,B)
ans =
11 12 3
13 14 6
15 16 9
返回一个向量,每个元素是每一列的最大值
> A
A =
7 2 3
7 5 6
7 8 9
> max(A,[],1)
ans =
7 8 9
当然,有列最大值就有行最大值,我们只需要将最后一个参数1,改为2即可:
> max(A,[],2)
ans =
7
7
9
其实,max(A)
跟max(A,[],1)
返回是一样的。
我们也可以求矩阵所有元素的中的最大值,只要先用max(A)
求出每列最大,然后对返回的向量再max
一下即可:
> max(max(A))
ans = 9
其实,这样相当于:
> max(A(:))
ans = 9
(:)
之前说过的哦,下面还会提到,请记住这个小东西哦。
magic()
跟名字一样,这个函数非常神奇而有魔力,它返回一个方阵,每行元素、每列元素、对角线元素的和都是相同的。不过,你不必去自己计算验证他,后面我们讲到的sum
函数会帮你验证。
> magic(3)
ans =
8 1 6
3 5 7
4 9 2
逻辑判断与find()
> a
a =
1.00000 15.00000 2.00000 0.50000
> a < 3
ans =
1 0 1 1
a < 3
返回跟原来一样大小的矩阵或向量,每个元素对应的位置满足条件为1,你不满足为0。
我们还可以结合find()
来选取满足条件的元素索引
> find(a < 3)
ans =
1 3 4
而对于矩阵
> find(magic(3) >= 7)
ans =
1
6
8
直接返回一个变量,则是按照将所有元素排成一列时的索引,也就是相当于之前说的(:)
,像这样
> magic(3)(:)
ans =
8
3
4
1
5
9
6
7
2
数一下,是不是像上面返回的那样:第1、6、8个元素>=7
,很显然是的。
> [r, c] = find(magic(3) >= 7)
r =
1
3
2
c =
1
2
3
返回两个变量呢,第一个返回值是行索引,第二个返回值是列索引,两个返回的向量length是一样的,我们只需要对应取值即可,也就是r
取1,c
取1,即第一行第一列,r
取3,c
取2,即第三行第二列,r
取2,c
取3,即第二行第三列,也就是说这三个元素满足>=7
sum()
求和函数
> a
a =
1.00000 15.00000 2.00000 0.50000
> sum(a)
ans = 18.500
与上面讲的max
类似,sum
对矩阵来说,sum(A)
跟sum(A,1)
一样,求每一列的和,返回一个向量。当第二个参数改为2的时候,就是对每一行求和,返回一个向量。
> A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
> sum(A)
ans =
34 34 34 34
> sum(A,2)
ans =
34
34
34
34
每行每列和都一样,这样印证了前面谈到的magic
函数
当然,也可以像max求矩阵最大值一样,来求矩阵所有元素的和:
> sum(sum(A))
ans = 136
> sum(A(:))
ans = 136
是不是有点温故知新的感觉了?不过还是要自己多练习哦。
对角阵
如何把一个矩阵变成只留正(主)对角元素,其他元素都变0的对角阵呢?这里正好复习一下之前讲的.
,eye
:
> A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
> A .* eye(4)
ans =
16 0 0 0
0 11 0 0
0 0 6 0
0 0 0 1
再结合前面的sum
求一下矩阵正(主)对角元素的和:
> sum(sum(A.*eye(4)))
ans = 34
咦~ 有没有发现也是34,跟前面行列求和的结果一样,所以magic
果然名不虚传。
flipud
主对角变副对角。其实就是以中间一行为轴,上下翻转。可能我表达能力不强,描述的不是很清楚,举个生动形象的栗子:小学的时候用的那种竖着翻的作业本,你把一页翻过去,然后看翻过去这页的反面。这个函数就是做了个翻作业本的事情,哈哈~
> flipud(eye(4))
ans =
Permutation Matrix
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
然后我们趁机求一下副对角元素的和:
> sum(sum(A.*flipud(eye(4))))
ans = 34
嗯,果然不出你所料,也是34。
pinv - 矩阵的逆(求逆矩阵)
> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
> pinv(A)
ans =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
矩阵x矩阵的逆
> A * pinv(A)
ans =
1.0000e+00 -1.1713e-14 6.3283e-15
4.1633e-17 1.0000e+00 -1.1102e-16
-5.9119e-15 1.2490e-14 1.0000e+00
学过线性代数的小伙伴可能说,这不对啊,结果应该是E
(单位阵),这个不是呀!别慌,这个事情下次再谈,记着欠你一个解释哦。
prod
相乘之和
> prod(a)
ans = 15
floor
向下取整
> floor(a)
ans =
1 15 2 0
ceil
向上取整
> ceil(a)
ans =
1 15 2 1
猜你喜欢
Octave命令及语法教程3 - 图像绘制与数据可视化
阅读 4581当开发学习算法时 图像可以让你更好地理解算法的内容 检查算法是否正常运行 是否达到了算法的目的 例如绘制损失函数J(θ)可以帮助确认梯度下降算法是否收敛 Octave有非常简单的工具用来生成大量不同的图
Mac如何安装MATLAB破解版
阅读 7093MATLAB是matrix和laboratory的组合,意为矩阵实验室,是一款特别好用的数学软件,尤其是对机器学习、人工智能。今天介绍一下Mac下安装MATLAB破解版教程。据说Mac上的matlab更丝滑。
什么是机器学习
阅读 3682机器学习,简单地说就是拟人。人工智能包含机器学习,而机器学习又包含深度学习。机器学习在我们的生活中有很多的应用,像自动驾驶、搜索引擎、谷歌翻译、垃圾邮件识别等等。
Octave命令及语法教程1 - 数据的导入、存储、移动
阅读 6100这节课的内容 能让你明白 在 Octave 中 怎样用几句简单的命令 很快地对数据进行移动 包括加载和储存一个向量 或矩阵 加载和存储数据 把矩阵放在一起 构建更大的矩阵 用索引对矩阵某个特定元素进行操作等等
Mac、Windows、Ubuntu(Linux)如何下载安装Octave
阅读 5971Octave是一款免费的开源软件,或者说Octave是一门科学编程语言。Octave有强大的数学导向语法,内置绘图和可视化工具,可以运行在GNU / Linux,macOS,BSD和Windows上,与Matlab脚本兼容。