R:一般矩阵运算

    

    常见的矩阵运算,包括线性代数运算、矩阵索引和矩阵元素筛选。

 

►线性代数运算

    你可以对矩阵进行各种线性代数运算,比如矩阵相乘、矩阵数量乘法和矩阵加法。针对以前例子中的y,以下为这三种运算的实例:

> y = matrix( c(1,2,3,4), nrow=2, ncol=2)

> y + y

     [,1] [,2]

[1,]    2    6

[2,]    4    8

> y %*% y

     [,1] [,2]

[1,]    7   15

[2,]   10   22

> 3 * y

     [,1] [,2]

[1,]    3    9

[2,]    6   12

 

►矩阵索引

    向量运算同样适用于矩阵。

> z <- matrix( c(1, 2, 3, 4, 1, 1, 0, 0, 1, 0, 1, 0),nrow=4 )

> z

     [,1] [,2] [,3]

[1,]    1    1    1

[2,]    2    1    0

[3,]    3    0    1

[4,]    4    0    0

> z[, 2:3]

     [,1] [,2]

[1,]    1    1

[2,]    1    0

[3,]    0    1

[4,]    0    0

> z[2:3, ]

     [,1] [,2] [,3]

[1,]    2    1    0

[2,]    3    0    1

> z[2:3, 3]

[1] 0 1

注:我们要得到的是一个1行2列的子矩阵,可是返回的却是一个由两个元素组成的向量。元素是正确的,可是数据类型却不对。如果把返回值输入到其他的矩阵函数里可能会导致错误。解决办法是通过设定参数drop,告诉R让返回结果保持数据的二维属性。对原本就是向量的对象,可以使用as.matrix()函数将其转化为矩阵。

 

> y <- matrix( c(1, 2, 3, 4, 5, 6), nrow=3 )

> y

     [,1] [,2]

[1,]    1    4

[2,]    2    5

[3,]    3    6

> y[ c(1,3), ] <- matrix( c(1,1,8,12), nrow=2 )

> y   #对一个矩阵的子矩阵进行赋值

     [,1] [,2]

[1,]    1    8

[2,]    2    5

[3,]    1   12

 

> x <- matrix( nrow=3,ncol=3 )

> y <- matrix( c( 4, 5, 2, 3 ), nrow=2 )

> y

     [,1] [,2]

[1,]    4    2

[2,]    5    3

> x[2:3, 2:3] <- y

> x

     [,1] [,2] [,3]

[1,]   NA   NA   NA

[2,]   NA    4    2

[3,]   NA    5    3

 

> y <- matrix( c(1, 2, 3, 4, 5, 6), nrow=3 )

> y

     [,1] [,2]

[1,]    1    4

[2,]    2    5

[3,]    3    6

> y[-2, ]   #取出矩阵y中除第二行外的所有行(负值索引用来排除掉某些元素)

     [,1] [,2]

[1,]    1    4

[2,]    3    6

> which( y %% 2 == 1 )

[1] 1 3 5

注:从向量索引的角度看,y的第1、3、5个元素是奇数。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值