R语言矩阵添加到三维数组所有切片的问题及优化方案咨询
问题原因解释
apply函数的默认简化(simplify)逻辑会将每次迭代返回的二维矩阵按列拉伸为长度为100的向量,再将所有迭代的输出拼接为矩阵,3次迭代就会得到100行3列的结构,和预期的三维数组不符,属于该函数的设计行为。
更简洁的解决方案
- 方法1:直接利用R的数组循环规则(最简洁)
R的数组按列优先存储,长度为100的sampleMean矩阵会自动循环3次,匹配combinedAtten的总长度,直接相加即可保留原数组维度:
distortedMask <- combinedAtten + sampleMean dim(distortedMask) # 输出 10 10 3
- 方法2:用
sweep函数做维度匹配操作
如果需要更通用的自定义操作(不只是加法),可以用专门针对数组维度操作的sweep函数,直接指定对前两个维度应用矩阵运算:
distortedMask <- sweep(combinedAtten, MARGIN = c(1,2), STATS = sampleMean, FUN = "+")
- 方法3:直接修改
apply输出的维度
如果习惯用apply逻辑,可以不用转列表,直接给输出的矩阵重设维度即可:
distortedMask <- apply(combinedAtten, 3, function(x)x + sampleMean) dim(distortedMask) <- dim(combinedAtten)
内容的提问来源于stack exchange,提问作者Knackiedoo
相关产品推荐
相关产品推荐

