【问题标题】:How to multiply parts of matrices?如何将矩阵的部分相乘?
【发布时间】:2014-07-28 12:51:02
【问题描述】:

我会非常简短!这是一个可重现的小例子:

Z1 <- matrix(rep(c(1, 0, 0, 0, 0,
                   1, 1, 0, 0, 0,
                   1, 0, 1, 0, 0,
                   1, 0, 0, 1, 0,
                   1, 0, 0, 0, 1),
                 times = 3),
               nrow  = 15,
               ncol  = 5,
               byrow = TRUE)

z <- matrix(c(0.1, 0.2, 0.3, 0.4, 0.5,
              0.6, 0.7, 0.8, 0.9,   1,
                1,   2,   3,   4,   5),
            nrow  = 3,
            ncol  = 5,
            byrow = TRUE)

我需要一个可扩展的非 for-loop 解决方案(例如,涉及来自 apply-family 的某些东西),它可以为我现在手动执行的这些计算提供等效结果:

Zz1 <- Z1[1:5,]   %*% z[1,]
Zz2 <- Z1[6:10,]  %*% z[2,]
Zz3 <- Z1[11:15,] %*% z[3,]
Zz  <- rbind(Zz1, Zz2, Zz3)

【问题讨论】:

  • 请展示您尝试过的内容
  • 你好。我试过for-loops。我对小规模问题的半解决方案是。 (我在这里写一行!):A &lt;- list(); B &lt;- list(); C &lt;- list(); for(i in 1:3){if(i == 1){A[[i]] &lt;- Z1[1:5,] %*% z[i,]}; if(i == 2){B[[i]] &lt;- Z1[6:10,] %*% z[i,]}; if(i == 3){C[[i]] &lt;- Z1[11:15,] %*% z[i,]};D &lt;- do.call(rbind, c(A, B, C))}

标签: r for-loop apply matrix-multiplication


【解决方案1】:

非常类似于question from earlier today:

rowSums(Z1 * z[rep(1:3,each=5),])
#[1] 0.1 0.3 0.4 0.5 0.6 0.6 1.3 1.4 1.5 1.6 1.0 3.0 4.0 5.0 6.0

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2016-12-11
    • 1970-01-01
    • 2022-06-30
    • 2013-12-09
    相关资源
    最近更新 更多