繁体   English   中英

行矩阵运算如何避免循环(“purrr-ified”)?

[英]How can a rowwise matrix operation avoid a loop (“purrr-ified”)?

是否可以避免在以下示例中使用 for 循环? 我曾尝试在某个时候使用purrr::pmap ,但它似乎比这个解决方案更复杂。 存在类似问题,但更多关于列表或 dataframe 列。

该示例来自矩估计方法 (GMM) 的上下文,尽管它在此处已高度程式化。

# Data
Z <- matrix(c(1:15), nrow = 5, ncol = 3)
r <- rnorm(5)  
g_bar <- matrix(1:3, ncol = 1)

# First observation
g <-  (Z[1,] * r[1]) - g_bar

# All other observations
for (i in 2:nrow(Z)) {  
  g_i <- (Z[i,] * r[i]) - g_bar
  g <- cbind(g, g_i)
}

g # A 3x5 matrix 

这是另一个解决方案:

g <- t(Z * r) - c(g_bar)

如果计算正是问题中的那个,那么已经有一个更好的答案,但是如果实际计算更复杂,那么这可能会推广到它:

mapply(function(z, r) z * r - g_bar, as.data.frame(t(Z)), r)

或者

mapply(function(z, r, g) z * r - g, as.data.frame(t(Z)), r, 
  MoreArgs = list(g = g_bar))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM