【问题标题】:Relative error between two matrices两个矩阵之间的相对误差
【发布时间】:2011-10-12 16:04:26
【问题描述】:

给定 R 中的两个浮点矩阵,我想得到每个条目之间的相对误差,然后在所有误差中搜索所有误差的最大值并将其与 10% 进行比较,即MAX_ERROR <= 10%

我知道相对错误是(对于每个条目):

|v_ij(MATRIX1) - v_ij(MATRIX2)| / | v_ij(MATRIX1)|

如何在R 中做到这一点,避免 for 循环?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    如果您想处理矩阵中为零的情况(否则会导致除以零),此答案有一些解决方案:Do you reassign == and != to isTRUE( all.equal() )?

    对我建议的almostEqual 函数稍作修改会产生:

    relativeError <- function(x, y, tolerance=1e-8) {
      diff <- abs(x - y)
      mag <- pmax( abs(x), abs(y) )
      ifelse( mag > tolerance, diff/mag, diff)
    }
    
    m1 <- cbind(c(0,1), c(1,1))
    m2 <- cbind(c(0,1), c(1,1.11)) 
    any(relativeError(m1, m2) > 0.01) # TRUE
    
    # Building on @DWin's answer:
    which(relativeError(m1, m2) > 0.01, arr.ind=TRUE) # 2 2
    

    请注意,这计算的相对误差与您的定义略有不同:它是对称的并且处理较小的值 - 因此速度会慢一些...

    【讨论】:

    • 干得好。我们正在接近一个防弹但灵活的答案。
    【解决方案2】:

    如果您想确定哪些元素未通过该测试,请尝试以下操作:

    over_err <- which( abs(MATRIX1-MATRIX2)/abs(MATRIX1) > 0.1, arr.ind=TRUE)
    

    如果您想在 MATRIX1 中显示满足(或不满足)该条件的索引和值列表,则:

    cbind(over_err, MATRIX1[over_err])
    

    【讨论】:

    • 如果您想订购它们,只需使用out &lt;- cbind(over_err, values = MATRIX1[over_err])out[order(values, decreasing = T),]。 :-)
    • 好一个:如果您只想要“前五名”,您可以使用:out[order(values, decreasing = T),][1:5]
    • 好! :-) 但是如果少于 5 个,你会得到 NA。也许head(out[...], 5) 会更好(虽然不是那么优雅!)。
    • 再次+1。也许out[order(values, decreasing = T),][ 1:max(NROW(out), 5) ]
    【解决方案3】:

    以下应该有效:

    maxerr <- max(abs((a - b) / a))
    

    其中ab 是两个矩阵。要将结果转换为百分比,请乘以 100

    【讨论】:

      【解决方案4】:

      如果精确矩阵是M_exact,而近似矩阵是M_app;然后使用 Mathematica,百分比误差可以计算为

      error(%) = 100(Norm[M_app - M_exact]/Norm[M_exact])
      

      检查矩阵元素的相对误差

      Relative_error = (Abs[M_app - M_exact])/Abs[M_exact]
      

      更多详情: http://www.netlib.org/lapack/lug/node75.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-07
        • 2017-02-12
        • 2016-05-26
        • 2017-01-02
        相关资源
        最近更新 更多