代码之家  ›  专栏  ›  技术社区  ›  Onur

R中矩阵的循环

  •  0
  • Onur  · 技术社区  · 2 年前

    我试图通过矩阵循环,但找不到一种简单而优雅的方法来代替编写许多(>10)方程。。。谁能帮帮我吗?

    enter image description here

    我想计算如下:

    而不是使用

    __ 顺便说一句:我的矩阵代码

    vals<- c(4/24, 6/24, 3/24, 3/24, 4/24, 4/24)
    x <- c(0,1)
    y <- c(0,1,2)
    df <- matrix(vals, byrow = TRUE, nrow = 2, ncol = 3,
                 dimnames = list(x,y))
    

    我认为应该有一个for-loop方法,而不是手动计算每个步骤,但我无法找到它。。

    4 回复  |  直到 2 年前
        1
  •  5
  •   PaulS    2 年前

    c(x %*% df %*% y) 
    
    #> [1] 0.5
    

    另一种可能的解决方案基于 outer :

    sum(outer(x, y, Vectorize(\(x,y) x*y*df[x+1,y+1])))
    
    #> [1] 0.5
    
        2
  •  4
  •   Zheyuan Li    2 年前
    x <- c(0, 1)
    y <- c(0, 1, 2)
    vals<- c(4/24, 6/24, 3/24, 3/24, 4/24, 4/24)
    mat <- matrix(vals, byrow = TRUE, nrow = 2, ncol = 3,
                  dimnames = list(x,y))  ## not a data frame; don't call it "df"
    

    还有比 for 回路:

    sum(tcrossprod(x, y) * mat)
    #[1] 0.5
    
        3
  •  2
  •   objectclosure    2 年前
    sum((x %o% y) * df)
    

    说明:

    x %o% y 获取向量的外积 x y 即:

    #>      [,1] [,2] [,3]
    #> [1,]    0    0    0
    #> [2,]    0    1    2
    

    因为它的尺寸与 df ,您可以将相应的元素相乘,得到总和: sum((x %o% y) * df)

        4
  •  0
  •   WhatIf    2 年前

    如果你是R新手(和我一样),这里是循环方法。

    result = 0
    for (i in 1:length(x)) {
      for (j in 1:length(y)) {
        result = result + x[i] * y[j] * df[i, j]
      }
    }
    result