【问题标题】:Calculate cumulative sum of vector and matrix by rows up to diagonal按行计算向量和矩阵的累积和,直到对角线
【发布时间】:2018-07-05 22:05:50
【问题描述】:

我有一个矩阵 (x)

x<-c(6,3,2,0,4,8,0,0,5)
x<-matrix(x, nrow = 3, ncol = 3)
       [ ,1][ ,2][ ,3]
[1, ]   6    0    0 
[2, ]   3    4    0 
[3, ]   2    8    5 

和一个向量(y):

y<-c(0.5,1.2,4.8)
y
[1] 0.5 1.2 4.8

我想用向量 y 的元素按行计算累积和,直到矩阵对角线。 我需要什么:

        [ ,1]             [ ,1][ ,2][ ,3]              [ ,1] 
   [1, ] 0.5          [1, ]  6    0    0          [1, ]  3  
(y)[2, ] 1.2   *  (x) [2, ]  3    4    0    = (w) [2, ]  6,3
   [3, ] 4.8          [3, ]  2    8    5          [3, ]  34,6

地点:

         [ ,1]
   [1, ]  3         0.5*6
(w)[2, ]  6,3   =   0.5*3 + 1.2*4
   [3, ]  34,6      0.5*2 + 1.2*8 + 4.8*5

因此我需要这个向量 (w)。 cumsum(y*x) – 按数字顺序计算列的所有元素。我有一个向量:

[1]  3.0  6.6 16.2 16.2 21.0 59.4 59.4 59.4 83.4

cumsum(y*t(x))
[1]  3.0  3.0  3.0  4.5  9.3  9.3 10.3 19.9 43.9

我需要,不会计算零。 可能吗? 提前谢谢你!

【问题讨论】:

  • 我不明白cumsum(y*x) 的输出。你介意再解释一下吗?
  • 为什么是 cumsum,当你在乘法矩阵时? y%*%t(x)
  • x - 是矩阵 y- 是向量。我正在尝试逐行获取带有矩阵的向量的累积和

标签: r matrix vector sum


【解决方案1】:

你可以试试colSums,即

colSums(y *t(x))
#[1]  3.0  6.3 34.6

【讨论】:

    【解决方案2】:

    一个for循环可以用来获取w个累积值:

    w=integer()
    
    for(i in 1:ncol(x)){
    
      w[i]=sum(x[i,1:i]*y[1:i])
    
     }
    
    w
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2014-07-17
      相关资源
      最近更新 更多