R - 每个第 n 个元素的快速行和矩阵

标签 r matrix

我有一个问题,关于对每个第 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/

相关文章:

r - 带有 factoextra 包的 PCA 图。如何将常规标签更改为示例名称?

python - Numpy,多维数组上的点积

java - 查找矩阵中是否存在路径

r - R 中变量的联合出现

r - 将多个图像组合在一起

返回选定的函数参数

r - 如何在 R 中扩展大型数据框

r - 通过 p 值对相关矩阵进行阈值化

c++ - 在数组中插入数据时出错 - 数组下标的无效类型 'int[int]'

c# - 无法使用 Math.NET Numerics 从矩阵中删除行