【问题标题】:Cumulative sum of matrix elements矩阵元素的累积和
【发布时间】:2015-12-21 04:46:13
【问题描述】:
我有一个矩阵定义为数组元素之间的成对差异:
a <- as.matrix(dist(c(1,2,3,4,5)))
我需要在不循环前两个元素、前三个元素等之间的成对差异之和的情况下进行计算。也就是说,我需要到达数组:
v <- c(1,4,10,20)
【问题讨论】:
标签:
r
matrix
vectorization
linear-algebra
【解决方案1】:
试试
head(cumsum(cumsum(1:5)),-1)
#[1] 1 4 10 20
【解决方案2】:
我不知道您是否确实希望调用累积和函数两次,因为我认为“前两个元素、前三个元素等之间的成对差异的总和。" 应该会导致:
c(1, 3, 6, 10)
无论如何,这应该适用于非顺序 x 以及您所需的输出:
> cumsumdiff <- function (x) cumsum(cumsum(sapply(x[-1], `-`, x[1])))
> cumsumdiff(1:5)
[1] 1 4 10 20
或者基于@Jota 的建议使用距离矩阵:
> cumsumdiff <- function(x) cumsum(cumsum(unname(as.matrix(dist(x))[1, -1])))
> cumsumdiff(1:5)
[1] 1 4 10 20