我有一个问题,关于对每个第 n 个元素的行进行快速求和。
考虑一个 16 列 m 行的矩阵。结果应该有 4 列和 m 行,其中每列是每 n 个元素的总和,即第一列是 1,5,9,13 列的总和,第二列是 2,6,10,14 .. . .
目前我正在通过矩阵乘法来实现这一点。然而,对于大型矩阵,这需要很长时间。发布的解决方案仅对一行中的 n 个连续元素求和,而不是拆分。
/编辑: 这是我目前解决这个问题的方法:
test <- matrix(c(1:24000),ncol=64)
SumFeatures <- function(ncol,nthElement) {
ncolRes <- ncol/nthElement
matrix(c(rep(diag(ncolRes),times = nthElement)),ncol = ncolRes,byrow = TRUE)
}
# Get Matrix to sum over every 4th element
sumMatrix <- SumFeatures(ncol(test),4)
system.time(test %*% sumMatrix)
有没有快速的解决方案来解决这个问题?
亲切的问候。
最佳答案
根据我的经验,当您将问题简化为内存中连续的两个一维数组之间的运算时,可以实现绝对最快的计算速度。这通常涉及 reshape 数据,这可能是一项昂贵的操作,但如果您需要多次重复计算,那就值得了。
以 11 × 8 矩阵为例(与 G. Grothendieck 的解决方案相同),我会这样做
dim(m) <- c(44, 2)
out <- m[, 1] + m[, 2]
dim(out) <- c(11, 4)
请记住,在 reshape 数组时,t()
和 aperm()
会复制数据,因此速度较慢,而更改 dim
属性很快。
关于R - 每个第 n 个元素的快速行和矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37238511/