乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      R語(yǔ)言中矩陣常用的操作(筆記)

       育種數(shù)據(jù)分析 2021-11-18

      發(fā)現(xiàn)好久沒(méi)有更新微信文了, 所謂才思枯竭, 黔驢技窮就是我現(xiàn)在的狀態(tài). 記得看過(guò)這樣一句話: "如果你不知道寫(xiě)什么東西, 那就寫(xiě)不知道寫(xiě)什么事情這件事吧". 深得我心.


      分享一篇我CSND博客里面的R語(yǔ)言矩陣操作, 可以通過(guò)編程理解很多線性代數(shù)的概念. 這篇文章閱讀量2萬(wàn)+, 而我的CSND博客閱讀量才10萬(wàn)+, 可以看出博客的閱讀量分布不是正態(tài)的, 符合馬太效應(yīng).

      1.1 矩陣的生成

      生成一個(gè)4行4列的矩陣,這里用1~16數(shù)字。

      mat <- matrix(1:16,4,4)

      mat
      15913
      261014
      371115
      481216

      1.2 提取主對(duì)角線

      diag(mat)

      1. 1


      2. 6


      3. 11


      4. 16


      1.3 生成對(duì)角線為1的對(duì)角矩陣

      m1 <- diag(4)

      m1
      1000
      0100
      0010
      0001

      1.4 提取矩陣的下三角

      mat[lower.tri(mat)]

      1. 2


      2. 3


      3. 4


      4. 7


      5. 8


      6. 12


      1.5 提取矩陣上三角

      mat[upper.tri(mat)]

      1. 5


      2. 9


      3. 10


      4. 13


      5. 14


      6. 15


      1.6 以矩陣下三角構(gòu)建對(duì)角矩陣

      mat1 <- mat

      mat1[upper.tri(mat1)] <- t(mat1)[upper.tri(mat1)]

      原矩陣mat:

      mat
      15913
      261014
      371115
      481216

      變換后的對(duì)角矩陣

      mat1
      1234
      2678
      371112
      481216

      1.7 將矩陣轉(zhuǎn)化為行列形式

      原矩陣,生成三列:行,列,值

      mat
      15913
      261014
      371115
      481216

      相關(guān)代碼

      nrow <- dim(mat)[1]

      ncol <- dim(mat)[2]

      row <- rep(1:nrow,ncol)

      col <- rep(1:ncol, each=nrow)

      frame <- data.frame(row,col,value =as.numeric(mat))

      frame
      rowcolvalue
      111
      212
      313
      414
      125
      226
      327
      428
      139
      2310
      3311
      4312
      1413
      2414
      3415
      4416

      1.8 將三列形式轉(zhuǎn)化為矩陣

      nrow <- max(frame[, 1])

      ncol <- max(frame[, 2])

      y <- rep(0, nrow * ncol)

      y[(frame[, 2] - 1) * nrow + frame[, 1]] <- frame[, 3]

      y[(frame[, 1] - 1) * nrow + frame[, 2]] <- frame[, 3]

      matrix(y, nrow = nrow, ncol = ncol, byrow = T)
      15913
      261014
      371115
      481216

      1.9 將矩陣轉(zhuǎn)置

      t(mat)
      1234
      5678
      9101112
      13141516

      2.1 矩陣相加減

      A=B=matrix(1:16,nrow=4,ncol=4)

      A + B
      2101826
      4122028
      6142230
      8162432
      A - B
      0000
      0000
      0000
      0000

      2.2 數(shù)與矩陣相乘

      c <- 2c*A
      2101826
      4122028
      6142230
      8162432

      3.3 矩陣相乘

      A 為m × n矩陣,B為n× k矩陣,用符合“%*%”

      A <- matrix(1:12,3,4)

      B <- matrix(1:20,4,5)

      A%*%B
      70158246334422
      80184288392496
      90210330450570

      3.4 計(jì)算t(A)%*%B的方法

      第一種,直接計(jì)算

      A <- matrix(1:12,3,4)

      B <- matrix(1:15,3,5)

      t(A)%*%B
      1432506886
      3277122167212
      50122194266338
      68167266365464

      第二種方法,用crossprod函數(shù),數(shù)據(jù)量大時(shí)效率更高

      A <- matrix(1:12,3,4)

      B <- matrix(1:15,3,5)

      crossprod(A,B)
      1432506886
      3277122167212
      50122194266338
      68167266365464

      3.5 矩陣求逆

      a <- matrix(rnorm(16),4,4)

      solve(a)
      -3.5423935.8825038-3.24218706.9619170
      1.081745-2.24463181.4850549-2.0828270
      -1.5775802.4698567-0.70708502.5241525
      -0.8306850.5105919-0.33521820.5344842

      矩陣與其逆矩陣的乘積為對(duì)角矩陣

      round(solve(a)%*%a)
      1000
      0100
      0010
      0001

      3.6 矩陣的廣義逆矩陣

      對(duì)于奇異陣,并不存在逆矩陣,但是可以計(jì)算其廣義逆矩陣

      a <- matrix(1:16,4,4)

      solve(a)
      Error in solve.default(a): Lapack例行程序dgesv: 系統(tǒng)正好是奇異的: U[3,3] = 0
      Traceback:


      1. solve(a)

      2. solve.default(a)

      顯示矩陣奇異,這里可以使用MASS包的ginv計(jì)算其廣義逆矩陣

      library(MASS)

      a <- matrix(1:16,4,4)

      ginv(a)
      -0.285-0.10750.070.2475
      -0.145-0.05250.040.1325
      -0.0050.00250.010.0175
      0.1350.0575-0.02-0.0975

      3.7 矩陣的直積(Kronecker,克羅內(nèi)克積),使用函數(shù)kronecker計(jì)算

      A 與B的直積:LaTex寫(xiě)作 “A \bigotimes B”

      假設(shè)A為2X2矩陣

      A <- matrix(c(10,5,5,20),2,2)

      A
      105
      520

      假設(shè)B為3X3矩陣

      B <- matrix(c(1,0,2,0,1,4,2,4,1),3,3)

      B
      102
      014
      241

      則A和B的直積就是6X6的矩陣

      kronecker(A,B)
      100205010
      010400520
      20401010205
      501020040
      052002080
      10205408020

      3.8 矩陣的直和(direct sum)

      公式:$ A\oplus B$,在LaTex中是 “A \oplus B “

      A <- matrix(c(1,2,3,3,2,1),2,3)

      A
      132
      231
      B <- matrix(c(1,0,6,1),2,2)

      B
      16
      01
      r1 <- dim(A)[1];c1 <- dim(A)[2]

      r2 <- dim(B)[1];c2 <- dim(B)[2]

      direct_sum <- rbind(cbind(A,matrix(0,r2,c2)),cbind(matrix(0,r1,c1),B))

      direct_sum
      13200
      23100
      00016
      00001

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多