在这节中, 我们将学习如何对数据进行运算操作. 接下来, 我们将会使用这些运算操作来实现我们的学习算法.
我现在快速地初始化一些变量. 比如设置 A 为一个 3x2 的矩阵, B 为一个 3x2 的矩阵, c 为一个 2x2 的矩阵.
我想算两个矩阵的乘积, 比如计算 AxC, 只需输入 A*C, 这是一个 3x2 矩阵乘以 2x2 矩阵, 得到这样一个 3x2 矩阵.
我们还可以对元素进行运算. 当输入 A.*B 的时候, 会将 A 中的各个元素与 B 中对应的元素相乘. 通常来说, 在 Octave 中点号一般用来表示元素运算.
输入 A.^2, 这将对矩阵 A 中的每一个元素进行平方.
设 v 为列向量[1; 2; 3], 可以输入 1./v, 得到每一个元素的倒数, 所以, 就会分别得到 1/1 1/2 1/3. 矩阵也可以这样操作, 1./A 得到 A 中每一个元素的倒数.
我们还可以输入 log(v), 对 v 中的所有元素进行求对数运算. exp(v)就是以 e 为底, 以 v 中的元素为指数的幂运算.
另外, 还可以用 abs(v), 对 v 的每一个元素求绝对值. 但是现在 v 中所有的元素都是正数. 我们输入 abs([ -1 ; 2 ; -3 ]), 来求这个矩阵的所有元素的绝对值.
如果输入 - v 就会得到 v 中所有元素的相反数. 这等价于 - 1 * v, 但是一般写成 - v 就可以了.
如果我想取出 v, 并对 v 中的每个元素都加 1. 其中一个方法是: 首先构造一个 3 行 1 列的元素全部为 1 的向量, 然后把这个向量跟原来的向量相加.
这样做的依据是: length(v)的值为 3,ones(length(v) ,1) 就相当于令 ones 的大小为 3x1. 然后再让它们相加, 即 v 中每个元素都加上 1.
另一种更简单的方法是: 直接用 v+1,v + 1 也就等于把 v 中的每一个元素都加上 1.
如果想求矩阵 A 的转置, 我们可以输入 A'(单左引号)这样我们就能得到 A 的转置. 如果想求 A 的转置的转置, 输入(A')'那么我们就会得到原来的矩阵 A.
还有一些有用的函数. 我们设 a=[1 15 2 0.5], 这是一个 1 行 4 列矩阵, 让我们设 val=max(a), 这将返回 a 中最大的元素, 也就是 15. 还可以设[val, ind] =max(a), 这将返回两个值, val 是 a 中最大的元素, ind 是 a 中该元素的索引. 即 a 中最大的元素为第二个元素, 值为 15. 特别注意: 如果你用命令 max(A), 而是一个矩阵的话, 这样做就是对每一列求最大值. 这个我们之后再讨论.
如果我们输入 a<3, 这称为对应元素比较. 这将 a 中的每一个元素逐个与 3 进行比较的运算, 元素小于 3 的返回 1, 否则返回 0.
如果我输入 find(a<3), 这将找出 a 中哪些元素是小于 3 的, 然后返回它们的索引.
如果输入 A = magic(3),magic 函数将返回一个名为幻方矩阵(magic squares), 它们具有以下这样的数学性质: 它们所有的行和列和对角线加起来都等于相同的值. 虽然这个函数在机器学习的用处不大, 但可以用这个方法很方便地生成一个 3x3 的矩阵. 这些幻方矩阵每行, 每列, 每个对角线三个数字加起来都是等于同一个数. 这是经过数学构造的结果.
如果我们输入[r,c] = find(A>=7), 就会找出 A 中大于等于 7 的元素. r 和 c 分别表示行和列, 这就表示, 第一行第一列的元素大于等于 7, 第三行第二列的元素大于等于 7, 第二行第三列的元素大于等于 7.
求和函数: 当我们输入 sum(a), 我们就会得到 a 中所有元素的和.
如果我想要 a 中所有元素的乘积, 我们就可以输入 prod(a). 它将返回这四个元素的乘积.
floor(a) 是向下取整. ceil(a)表示向上取整.
如果输入 rand(3), 这通常得到一个 3*3 的随机矩阵. 如果输入 max(rand(3),rand(3)), 它由两个 3*3 的随机矩阵中元素较大值的值组成. 所有, 你会发现这些元素相对而言都比较大. 因为它的每个元素都是取两个随机矩阵的对应元素中最大值的结果.
输入 max(A,[],1), 这样做会得到每一列的最大值. 所以第一列的最大值就是 8, 第二列是 9, 第三列的最大值是 7, 这里的 1 表示从 A 矩阵第一个维度去取值.
相对地, 如果我键入 max(A,[],2), 这将得到每一行的最大值, 所以, 第一行的最大值是等于 8, 第二行最大值是 7, 第三行是 9.
可以用这个方法来求得每行或每列的最值. 另外, 要记住, 默认情况下 max(A)返回的是每一列的最大值, 如果你想要找出整个矩阵 A 的最大值, 你可以输入 max(max(A)), 或者你可以将矩阵 A 转换成一个向量, 然后求最大值, 可以输入 max(A(:)), 这就是把 A 转换成一个向量, 并返回向量中的最大值.
最后, 让我们把 A 设计为一个 9x9 的幻方, 幻方的特点是每行每列每对角线的求和都是相等的. 这是一个 9x9 的幻方.
输入 sum(A,1), 计算每一列的总和, 这也验证了这个幻方每一列加起来都相等, 都为 369. 输入 sum(A,2), 计算每一行的总和, 这也验证了这个幻方每一行加起来都相等, 都为 369.
接着, 我们计算对角线的和, 确保它们加起来还是同一个数. 现在我们要构造一个 9x9 的单位矩阵, 输入 eye(9), 然后我们要用 A 于它元素对应相乘. 输入 A.*eye(9), 这样做的结果是这两个矩阵对应元素相乘, 除了对角线元素外的其他元素都为 0.
然后输入 sum(sum(A.*eye(9)), 这实际上是求 A 的对角线的元素之和, 确实是 369.
你也可以求另一条对角线 (从左下角到右上角的对角线) 的和. 我们可以输入 sum(sum(A.*flipup(eye(9))), 其中 flipup 表示使矩阵垂直翻转. 实际上我们求得另一条对角线和也是 369.
设 A=magic(3). 如果你想求 A 矩阵的逆矩阵, 输入 pinv(A), 通常称为伪逆矩阵, 你就把它看成是矩阵 A 求逆, 因此这就是 A 矩阵的逆矩阵. 设 temp = pinv(A), 然后再用 temp 乘以 A, 得到的就是单位矩阵, 对角线为 1, 其他元素为 0.
以上就是对矩阵的元素进行运算的方法. 在运行一个学习算法之后, 最有用的事情去观察结果, 或者说让结果可视化. 在下一节中, 我们会学习如何快速将数据可视化.
来源: https://www.cnblogs.com/shirleyya/p/12637444.html