【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多