【问题标题】:Multiply Matrix R乘矩阵 R
【发布时间】:2020-12-29 21:03:06
【问题描述】:

我将如何乘法:

                    BNP.PA.Adjusted ACA.PA.Adjusted UG.PA.Adjusted
BNP.PA.Adjusted     0.010129967     0.009577789    0.007148473
ACA.PA.Adjusted     0.009577789     0.012127668    0.007340544
UG.PA.Adjusted      0.007148473     0.007340544    0.015503678

作者:

c(0.3 , 0.2 , 0.5)

为了得到:

                    BNP.PA.Adjusted       ACA.PA.Adjusted       UG.PA.Adjusted
BNP.PA.Adjusted     0.010129967x0.3x0.3   0.009577789x0.2x0.3   0.007148473x0.5x0.3
ACA.PA.Adjusted     0.009577789x0.3x0.2   0.012127668x0.2x0.2   0.007340544x0.5x0.2
UG.PA.Adjusted      0.007148473x0.3x0.5   0.007340544x0.2x0.5   0.015503678x0.5x0.5

我尝试使用 %*% : MaMatrix <- cov_m %*% Poids 但这只是

                    BNP.PA.Adjusted   ACA.PA.Adjusted   UG.PA.Adjusted
BNP.PA.Adjusted     0.010129967x0.3   0.009577789x0.2   0.007148473x0.5
ACA.PA.Adjusted     0.009577789x0.3   0.012127668x0.2   0.007340544x0.5
UG.PA.Adjusted      0.007148473x0.3   0.007340544x0.2   0.015503678x0.5

我错过了什么?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    一个选项是outervector然后直接相乘

    m1 <- outer(v1, v1)
    

    或如@user20650 建议的那样 (tcrossprod)

    m1 <- tcrossprod(v1)
    cov_m * m1
    

    -输出

    #               BNP.PA.Adjusted ACA.PA.Adjusted UG.PA.Adjusted
    #BNP.PA.Adjusted    0.0009116970    0.0005746673   0.0010722709
    #ACA.PA.Adjusted    0.0005746673    0.0004851067   0.0007340544
    #UG.PA.Adjusted     0.0010722709    0.0007340544   0.0038759195
    

    数据

    v1 <- c(0.3, 0.2, 0.5)
    
    cov_m <- structure(c(0.010129967, 0.009577789, 0.007148473, 0.009577789, 
    0.012127668, 0.007340544, 0.007148473, 0.007340544, 0.015503678
    ), .Dim = c(3L, 3L), .Dimnames = list(c("BNP.PA.Adjusted", "ACA.PA.Adjusted", 
    "UG.PA.Adjusted"), c("BNP.PA.Adjusted", "ACA.PA.Adjusted", "UG.PA.Adjusted"
    )))
    

    【讨论】:

      【解决方案2】:

      你可以试试下面的代码

      > diag(x) %*% cov_m %*% diag(x)
                   [,1]         [,2]         [,3]
      [1,] 0.0009116970 0.0005746673 0.0010722709
      [2,] 0.0005746673 0.0004851067 0.0007340544
      [3,] 0.0010722709 0.0007340544 0.0038759195
      

      数据

      > dput(x)
      c(0.3, 0.2, 0.5)
      
      > dput(cov_m)
      structure(c(0.010129967, 0.009577789, 0.007148473, 0.009577789, 
      0.012127668, 0.007340544, 0.007148473, 0.007340544, 0.015503678
      ), .Dim = c(3L, 3L), .Dimnames = list(c("BNP.PA.Adjusted", "ACA.PA.Adjusted",
      "UG.PA.Adjusted"), c("BNP.PA.Adjusted", "ACA.PA.Adjusted", "UG.PA.Adjusted"
      )))
      

      【讨论】:

      • 嗨谢谢你的帮助,它正在工作。不能接受 2 个答案,所以我赞成你的。
      【解决方案3】:

      你也可以使用sweep():

      sweep(mat, 2, FUN = `*`, vec) * vec
      
                      BNP.PA.Adjusted ACA.PA.Adjusted UG.PA.Adjusted
      BNP.PA.Adjusted    0.0009116970    0.0005746673   0.0010722709
      ACA.PA.Adjusted    0.0005746673    0.0004851067   0.0007340544
      UG.PA.Adjusted     0.0010722709    0.0007340544   0.0038759195
      

      【讨论】:

        【解决方案4】:

        您可以简单地将矩阵的转置乘以向量并再次转置:例如:

        m <- matrix(1:9, ncol = 3)
        m
             [,1] [,2] [,3]
        [1,]    1    4    7
        [2,]    2    5    8
        [3,]    3    6    9
        x <- c(2, 4, 6)
        m <- t(t(m) * x) # all you need
        m
             [,1] [,2] [,3]
        [1,]    2   16   42
        [2,]    4   20   48
        [3,]    6   24   54
        

        【讨论】:

          猜你喜欢
          • 2023-04-06
          • 1970-01-01
          • 2012-05-27
          • 2020-01-17
          • 2021-01-31
          • 2018-01-03
          • 2012-04-01
          • 1970-01-01
          相关资源
          最近更新 更多