首页 > 解决方案 > R中不同维度数组的总和

问题描述

我有这个代码:

k = 20
rho = 0.5
pi_greco = array(rep(1/k, k), c(1,20,50))

pi_greco_x <- function(k, rho, pi_greco){
  E = array(diag(k),c(20, 20, 50))
  E[k,k,] = 0
  prob = (1-rho)*pi_greco + rho*E
  return(prob)
}

在概率中,我需要将 pi_greco 的每个 1x20 维矩阵(乘以 1-rho)与 E 的每个 20x20 维矩阵(乘以 rho)相加,以便在概率中得到 50 个不同的矩阵。但是我该怎么做呢?

这就像说我想做

prob = (1-rho)*pi_greco[,,1] + rho*E[,,1]

但是对于所有 50 次不使用 for 循环

提前致谢。

标签: rarrayssumproduct

解决方案


考虑一下:



k = 3
rho = 0.5
pi_greco = array(rep(1/k, k), c(1,20,50))

pi_greco_x <- function(k, rho, pi_greco){
  E = array(diag(k),c(k, 20, 50))
  E[k,k,] = 0

  p_rows <- Reduce(
      f=function(a,b){ abind( a, (1-rho)*pi_greco, along=1 ) },
      x=1:k,
      init=NULL
  )

  prob <- p_rows + rho*E
  return(prob)
}

pi_greco_x( k, rho, pi_greco )

我通过使用 abind 20 次将 1x20x50 重复为 20x20x50

这意味着它们现在可以安全地添加在一起。使用两个以上的维度可能会出现问题。典型的人脑不太习惯。


推荐阅读