如何计算R中数组中所有元素的矩阵积?

n <- 3
ARRAY <- array(NA, dim = c(4, 4, n))
for (i in 1:4) {
    for (j in 1:4) {
        ARRAY[i, j, ] <- rnorm(n)
    }
}

# this gives me a 1x1 matrix, which is wrong
Reduce("%*%", ARRAY)
mapply("%*%", ARRAY[,,1], ARRAY[,,2])

# this works, but I'd like a generalizable option
ARRAY[,,1]%*%ARRAY[,,2]%*%ARRAY[,,3]

推荐答案

我们可以使用asplit将第三维度拆分为list,然后使用Reduce

out2 <-  Reduce(`%*%`, asplit(ARRAY, 3))

-测试

> out1 <- ARRAY[,,1]%*%ARRAY[,,2]%*%ARRAY[,,3]
> identical(out1, out2)
[1] TRUE

或者也可以循环最后dim个序列,提取list个序列中的元素

out2 <- Reduce("%*%", lapply(seq(dim(ARRAY)[3]), function(i) ARRAY[,, i]))

或者也可以使用purrr中的array_branch

library(purrr)
library(magrittr)
out3 <- array_branch(ARRAY, 3) %>%
    reduce(`%*%`)
> identical(out1, out3)
[1] TRUE

R相关问答推荐

使用sf或terra的LINESTRAING的累积长度

计算时间段的ECDF(R)

使用across,starts_with和ifelse语句变更多个变量

`夹心::vcovCL`不等于`AER::tobit`标准错误

正则表达式在第二个管道和第二个T之后拆分R中的列

WRS2包中带有bwtrim的简单ANOVA抛出错误

在gggraph中显示来自不同数据帧的单个值

如何计算增加10米(0.01公里)的行?

使用shiny 中的所选要素行下拉菜单

`-`是否也用于数据帧,有时使用引用调用?

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

快速合并R内的值

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

按组使用dummy r获取高于标准的行的平均值

使用显式二元谓词子集化sfc对象时出错

基于已有ID列创建唯一ID

有没有一种方法可以用非标准参数编写一个定制的ggploy主题函数?

使用条件格式R替换字符串中的字符

同时使用Scale_y_Break和Scale_x_Continue时,X轴值出现两次

R图不同 colored颜色 的回归线和散点图