gpt4 book ai didi

arrays - 根据维度名称聚合数组

转载 作者:行者123 更新时间:2023-12-02 21:04:06 27 4
gpt4 key购买 nike

我正在尝试以有效的方式根据维度名称聚合数组。

ex_array <- array(1:10000, dim = c(100, 10, 10),
dimnames = list(Col1 = c(rep(10,50), rep(20, 50)),
Col2 = 1:10,
Col3 = 1:10))

现在我想根据第一个维度的名称聚合这个数组。该维度有 2 个不同的名称(10 和 20),因此新数组的维度应为 2 x 10 x 10。维度名称 1 等于 10 的所有值应相加,维度 1 等于 20 的值应求和进行总结。

有什么聪明的方法可以做到这一点吗?

最佳答案

reshape2。我认为 reshape2 是最适合这里的,如果您愿意使用包:

library(reshape2)
res = acast(melt(ex_array), Col1 ~ Col2 ~ Col3, fun.aggregate = sum)

str(res)
# int [1:2, 1:10, 1:10] 1275 3775 6275 8775 11275 13775 16275 18775 21275 23775 ...
# - attr(*, "dimnames")=List of 3
# ..$ : chr [1:2] "10" "20"
# ..$ : chr [1:10] "1" "2" "3" "4" ...
# ..$ : chr [1:10] "1" "2" "3" "4" ...

我认为这也会折叠其他维度名称中的重复项(如果有的话)。


base R。您可以使用rowsum,但它在这里很笨重,因为它是为矩阵设计的

res2 = array(, c(2, 10, 10), dimnames = lapply(dimnames(ex_array), unique))
res2[] = sapply(seq_len(dim(ex_array)[3]), function(k)
rowsum(ex_array[,,k], rownames(ex_array[,,k])))

关于arrays - 根据维度名称聚合数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com