【问题标题】:R Matrix MultiplicationR矩阵乘法
【发布时间】:2023-04-06 16:59:01
【问题描述】:

我有一个列表,R=

[[1]]
     [,1] [,2]
[1,]  100    0
[2,]    0  100

[[2]]
             [,1]       [,2]
[1,] 0.0006364031  0.2521204
[2,] 0.2521204236 99.9993643`

我想F %*% R

         F
[1,] 1 -6.264917e-04
[2,] 1  1.575666e-04

F[1,]矩阵乘以R[[1]]F[2,]矩阵乘以R[[2]]

我该怎么做呢?

对不起。我想我被误解了。我真正想要的是F[1,]%*%R[[1]]%*%t(F[1,])F[2,]%*%R[[2]]%*%t(F[2,]) @Sven Hohenstein

【问题讨论】:

  • 我在那儿投票赞成你的回答。
  • 大家好,感谢您的回答。如果我想做 F %*% R %*% t(F) ,有没有简单的方法?
  • 对不起。我想我被误解了。我真正想要的是 F[1,]%*%R[[1]]%*%t(F[1,]) 和 F[2,]%*%R[[2]]%*%t( F[2,])
  • @Sven Hohenstein 对不起。我想我被误解了。我真正想要的是 F[1,]%*%R[[1]]%*%t(F[1,]) 和 F[2,]%*%R[[2]]%*%t( F[2,])

标签: r matrix state-space


【解决方案1】:
mapply("%*%", as.data.frame(t(F)), R, SIMPLIFY = FALSE)

$V1
     [,1]        [,2]
[1,]  100 -0.06264917

$V2
             [,1]     [,2]
[1,] 0.0006761289 0.267877

更新

回答你的第二个问题:

lapply(R, function(x) F %*% x %*% t(F))

[[1]]
          [,1]      [,2]
[1,] 100.00004  99.99999
[2,]  99.99999 100.00000

[[2]]
             [,1]         [,2]
[1,] 0.0003597493 0.0005083061
[2,] 0.0005083062 0.0007183373

更新

回答您更新的问题:

mapply(function(x, y) y %*% x %*% as.matrix(y), R, as.data.frame(t(F)), 
       SIMPLIFY = FALSE)

[[1]]
     [,1]
[1,]  100

[[2]]
             [,1]
[1,] 0.0007183373

【讨论】:

  • 你认为Reduce可以在这里使用吗?当涉及到矩阵 mul/add.. 时,我总是想知道 Reduce 的解决方案
  • @Arun 我想Reduce 不可能,因为 OP 只想将两个矩阵相乘。如果应该为同一个运算符使用两个以上的参数,Reduce 可能会有所帮助。
  • 我明白了...谢谢。我什么时候才能理解Reduce? :)
  • 不错的解决方案,遍历数据框的列以获取 F 行。
  • 大家好,感谢您的回答。如果我想做 F %*% R %*% t(F) ,有没有简单的方法?
【解决方案2】:
R <- list(matrix(c(100,0,0,100), 2), matrix(c(0.0006364031,0.2521204236,0.2521204,99.9993643), 2))
F <- matrix(c(1, 1, -6.264917e-04,  1.575666e-04), 2)

lapply(1:2, function(x) F[x,] %*% R[[x]])
## [[1]]
##      [,1]        [,2]
## [1,]  100 -0.06264917
## 
## [[2]]
##              [,1]     [,2]
## [1,] 0.0006761289 0.267877

【讨论】:

  • 哦哇.. 一个小评论会更合适,恕我直言。
【解决方案3】:

只要做到这一点:

> F[1,]%*%R[[1]]
     [,1]        [,2]
[1,]  100 -0.06264917


> F[2,]%*%R[[2]]
             [,1]     [,2]
[1,] 0.0006761289 0.267877

您是否希望以某种特殊方式存储这些内容?

【讨论】:

  • 如果列表很长怎么办,例如。 R[[1]] 到 R[[100]] 我想在一个命令中完成?
  • 我想做 F %*% R %*% t(F) 代替
  • 如果列表很长怎么办,例如。 R[[1]] 到 R[[100]] 并且我想在一个命令中做到这一点? - 这个问题已经回答你的 SO 帖子。
  • > 我想做 F %*% R %*% t(F)那边的问题。不要在两个地方都发布相同的问题。
  • 对不起。我是新来的。以后不会双发。感谢您的快速响应
猜你喜欢
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2020-01-17
  • 2021-01-31
  • 2018-01-03
  • 2012-04-01
  • 1970-01-01
相关资源
最近更新 更多