5-7 矩阵的运算

5-7-1 矩阵与一般常数的四则运算

当碰上矩阵对象与一般常数的运算时,只要将各个元素与该常数分别执行运算即可。在正式介绍实例前,笔者先建立下列m1.matrix矩阵。

实例ch5_48:将m1.matrix矩阵加3的实例。

实例ch5_49:将m2.matrix矩阵减1的实例。

实例ch5_50:将m3.matrix矩阵乘5的实例。

实例ch5_51:将m4.matrix矩阵除2的实例。

实例ch5_52:将m1.matrix加上m2.matrix,执行两个矩阵相加的实例。

特别需要留意的是,两个矩阵能进行四则运算的先决条件是它们彼此的维度相同,否则会出现错误信息。有意思的是,R是允许矩阵对象和向量对象相加的,只要矩阵的行数与向量长度相同即可,可参考下列实例。

实例ch5_53:矩阵与向量相加的运算实例。

如果矩阵的列数与向量长度相同,也可以进行相加运算,但一般不常用,读者可以自行测试了解。矩阵也可与向量相乘,只要向量长度与矩阵行数相同即可。

实例ch5_54:矩阵与向量相乘的运算实例。

上述命令在执行时,相当于矩阵第一行的所有元素与向量的第一个元素相乘,此例是乘1。矩阵第二行所有元素与向量的第二个元素相乘,此例是乘2。矩阵第三行的所有元素与向量的第三个元素相乘,此例是乘3。

特别需要说明的是,“*”乘号是单一元素逐步操作的,如果是要计算矩阵的内积,则需使用另一个特殊的矩阵相乘符号“%*%”,将在5-7-4节说明。

5-7-2 行(Row)和列(Column)的运算

在4-2节中笔者介绍了向量对象常用的函数sum()和mean(),这些函数已被修改可应用于矩阵。

❑ rowSums():计算行中元素的总和。

❑ colSums():计算行中元素的总和。

❑ rowMeans():计算行中元素的平均值。

❑ colMeans():计算列中元素的平均值。

实例ch5_55:利用rowSums()和rowMeans()函数,以及baskets.New对象计算Lin和Jordon的总进球数和平均进球数。

使用上述rowSums()和rowMeans()函数一次可计算所有行的数据,假设只想要一个人的数据,可回头使用sum()和mean()函数。

实例ch5_56:利用sum()和mean()函数,以及baskets.New对象计算Lin的总进球数和平均进球数。

实例ch5_57:使用baskets.New对象计算各场次的总进球数和平均每位球员的进球数。

使用上述colSums()和colMeans()函数一次可计算所有列的数据,假设只想要一场比赛的数据,可回头使用sum()和mean()函数。

实例ch5_58:使用baskets.New对象计算第3场次的总进球数和平均每位球员的进球数。

5-7-3 转置矩阵

t()函数可执行矩阵转置,转置矩阵后,矩阵的行列元素将互相对调。

实例ch5_59:将baskets.New矩阵执行转置。

5-7-4 %*%矩阵相乘

矩阵对象相乘的运算基本上和数学矩阵相乘是一样的。

实例ch5_60:分别使用“*”和“%*%”计算矩阵和向量的乘法。

读者可以试着比较上述运算结果。

实例5_61:两个3行3列矩阵乘法的应用。

矩阵相乘时最常发生的错误是两个相乘矩阵的维度不符合矩阵运算原则,此时会出现“非调和自变量”错误信息,如。

5-7-5 diag()

diag()函数很活,当第一个参数是矩阵时,可传回矩阵对角线的向量值。

实例ch5_62:在各种不同维度的数组中,传回矩阵对角线的向量值。

diag()函数的另一个用法是传回矩阵,此矩阵的对角线是使用x向量值,其余填0。该命令的格式如下所示。

diag(x, nrow, ncol)

其中x是向量,nrow是矩阵行数,ncol是矩阵列数。若省略nrow和ncol则用x向量元素个数(假设是n)建立n行n列矩阵。

实例ch5_63:使用diag()函数传回矩阵的实例。

5-7-6 solve()

使用solve()函数可传回反矩阵,使用这个函数时要小心,有时会碰上小数字数被舍弃的问题。

实例ch5_64:反矩阵的应用。

5-7-7 det()

det是指数学中的行列式(Determinant),这个函数可以计算矩阵的行列式值(Determinant)。

实例ch5_65:det()函数的应用。