r - 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 循环
提前致谢。
解决方案
考虑一下:
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
这意味着它们现在可以安全地添加在一起。使用两个以上的维度可能会出现问题。典型的人脑不太习惯。
推荐阅读
- chilkat - 获取 Chilkat 版本
- vue.js - 无法更正错误以加载
Vue 风格 - python - VS Code 不会改变 python 环境
- python - 是否可以使用 Python 更改多个 Facebook 帖子的隐私设置?
- node.js - passport.authenticate("local")(req, res, function () {} 块没有被执行
- javascript - 使用 Vue.js 在 Janus 上流式传输
- arraylist - 使用 pyspark 从平面记录创建段数组
- ruby - 按降序返回非负整数
- html - CSS:将前半部分孩子放在左网格列中
- ruby - Slack-Ruby-Bot 命令的 RSpec 测试