久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

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

     育種數據分析 2021-11-18

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


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

    1.1 矩陣的生成

    生成一個4行4列的矩陣,這里用1~16數字。

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

    mat
    15913
    261014
    371115
    481216

    1.2 提取主對角線

    diag(mat)

    1. 1


    2. 6


    3. 11


    4. 16


    1.3 生成對角線為1的對角矩陣

    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 以矩陣下三角構建對角矩陣

    mat1 <- mat

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

    原矩陣mat:

    mat
    15913
    261014
    371115
    481216

    變換后的對角矩陣

    mat1
    1234
    2678
    371112
    481216

    1.7 將矩陣轉化為行列形式

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

    mat
    15913
    261014
    371115
    481216

    相關代碼

    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 將三列形式轉化為矩陣

    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 將矩陣轉置

    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 數與矩陣相乘

    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 計算t(A)%*%B的方法

    第一種,直接計算

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

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

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

    第二種方法,用crossprod函數,數據量大時效率更高

    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

    矩陣與其逆矩陣的乘積為對角矩陣

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

    3.6 矩陣的廣義逆矩陣

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

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

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


    1. solve(a)

    2. solve.default(a)

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

    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,克羅內克積),使用函數kronecker計算

    A 與B的直積:LaTex寫作 “A \bigotimes B”

    假設A為2X2矩陣

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

    A
    105
    520

    假設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

      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产午夜亚洲精品国产成人| 熟妇人妻中文字幕| 亚洲国产精品久久久久久久| 国产一区二区三区不卡在线看| 日韩精品国产二区三区| 夜色福利站WWW国产在线视频| 色老头在线一区二区三区| 亚洲av成人一区在线| 日日噜噜夜夜狠狠视频| 一本av高清一区二区三区| 五月天天天综合精品无码| 爆乳无码AV一区二区三区 | 精选国产av精选一区二区三区| 无码人妻斩一区二区三区| 国产乱子伦一区二区三区| 大香伊蕉在人线国产最新2005| 无码人妻精品一区二区三区蜜桃 | 国产精品亚洲А∨天堂免| 少妇精品无码一区二区三区| 亚洲成AV人片在线观高清| 国产精品未满十八禁止观看| 国产亚洲欧美在线观看三区| 亚洲国产AV无码精品无广告| 国产成AV人片在线观看天堂无码| 国产一区二区三区在线视頻| 国产乱人伦AV在线麻豆A | 国语精品自产拍在线观看网站| 亚洲精品在看在线观看| 99久久婷婷国产综合精品青草漫画| 四虎亚洲国产成人久久精品| 精品无码日韩国产不卡AV| 国产精品剧情亚洲二区| 国产成人精品久久| 国产亚洲欧美另类一区二区 | 亚洲VA无码专区国产乱码| 国产在线精品一区二区夜色| 少妇办公室好紧好爽再浪一点| 果冻传媒亚洲区二期| 精品日韩亚洲AV无码| 国产线播放免费人成视频播放| 久久综合九色欧美综合狠狠|