R語言的一些矩陣運算


矩陣的存儲默認是按列進行存儲的

1,創建矩陣

matrix (data = NA, nrow = 1, ncol = 1, byrow =FALSE, dimnames = NULL) 

創建一個c(1:12)的三行四列的矩陣,

colnames<-c("c1","c2","c3","c4")

rownames<-c("r1","r2","r3")

 x<-matrix(1:12,nrow=3,ncol=4,byrow=TRUE,dimnames=list(rownames,colnames))

x
    c1 c2 c3 c4
r1 1   2   3   4
r2 5   6   7   8
r3 9  10  11  12

2,矩陣的轉置

y<-t(x)

若是針對的是一個向量

y<-(1:10)

裝置后得到的是行向量
> t(y)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 2 3 4 5 6 7 8 9 10

> class(y)
[1] "integer"
> class(t(y))

[1] "matrix"

若要的到列向量則
> t(t(y))
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6
[7,] 7
[8,] 8
[9,] 9
[10,] 10

 

3,創建一個服從正態分布的隨機數矩陣

matrix(rnorm(100),nrow=10)

4,制造一個數字相同的n列m行矩陣

matrix(2,ncol=n,nrow=m)

4.1創建對角矩陣

diag(x,ncol=n,nrow=m)

若x為矩陣  則diag(x)將會提取矩陣x的對角,則返回的是向量值

> diag(x)
[1] 1 6 11

> diag(diag(x))
   [,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 6 0
[3,] 0 0 11

返回的是以矩陣對角的對角矩陣

>diag(c(1:4),4,4)
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 2 0 0
[3,] 0 0 3 0
[4,] 0 0 0 4

>diag(3)

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

>A=diag(4)+1
> A
  [,1] [,2] [,3] [,4]
[1,]   2   1   1   1
[2,]   1   2   1   1
[3,]   1   1   2   1
[4,]   1   1   1   2

4,求矩陣的行數和列數

n<-ncol

m<-nrow

為矩陣的行和列命名

rownames(x)<-c()

colnames(x)<c()

 

5,矩陣運算

A為m×n矩陣,c>0,在R中求cA可用符號:“*”,例如:
> c=2
> c*A
        [,1] [,2] [,3] [,4]
[1,]   2   8   14   20
[2,]   4   10   16   22
[3,]   6   12   18   24

6   矩陣相乘
A為m×n矩陣,B為n×k矩陣,在R中求AB可用符號:“%*%”,例如:
> A=matrix(1:12,nrow=3,ncol=4)
> B=matrix(1:12,nrow=4,ncol=3)
> A%*%B
      [,1] [,2] [,3]
[1,]   70 158 246
[2,]   80 184 288
[3,]   90 210 330

 

對矩陣求逆

solve(x)

7,向量和矩陣的內積和外積運算(向量的長度一樣)

向量的內積

x<-c(1:5)

y<-c(3:7)
> z<-crossprod(x,y)

> z
[,1]
[1,] 85

向量的外積

> w<-tcrossprod(x,y)
> w
    [,1] [,2] [,3] [,4] [,5]
[1,] 3 4 5 6 7
[2,] 6 8 10 12 14
[3,] 9 12 15 18 21
[4,] 12 16 20 24 28
[5,] 15 20 25 30 35

 

向量、矩陣的外積(叉積)
設x和y是n維向量,則x%o%y表示x與y作外積.

> q<-x%o%y
> q
    [,1] [,2] [,3] [,4] [,5]
[1,] 3 4 5 6 7
[2,] 6 8 10 12 14
[3,] 9 12 15 18 21
[4,] 12 16 20 24 28
[5,] 15 20 25 30 35

> a %o% b
, , 1, 1
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 2, 1
     [,1] [,2] [,3] [,4]
[1,]    2    8   14   20
[2,]    4   10   16   22
[3,]    6   12   18   24
, , 1, 2
     [,1] [,2] [,3] [,4]
[1,]    3   12   21   30
[2,]    6   15   24   33
[3,]    9   18   27   36
, , 2, 2
     [,1] [,2] [,3] [,4]
[1,]    4   16   28   40
[2,]    8   20   32   44
[3,]   12   24   36   48

outer()是更為強大的外積運算函數,outer(x,y)計算向量x與y的外積,它等價於x %o%y
函數。outer()的一般調用格式為
      outer(x,y,fun=”*”)

 

det(x),求矩陣x的行列式值

qr(x)$rank求x矩陣的秩

 

解線性方程組和求矩陣的逆矩陣

    若求解線性方程組Ax=b,其命令形式為solve(A,b),求矩陣A的逆,其命令形式為solve(A).設矩陣A=t(array(c(1:8,10),dim=c(3,3))),b<-c(1,1,1),則解方程組Ax=b的解x和求矩陣A的逆矩陣的命令如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM