【问题标题】:R, matrices: subtract maximum row-wise, removing NAsR,矩阵:逐行减去最大值,去除 NA
【发布时间】:2020-07-04 20:01:29
【问题描述】:

给定一个非方阵a 我需要从每一行中减去它自己的最大值。矩阵包含NAs,将被丢弃。矩阵的维度是预先知道的并且是固定的。此外,所有NAs 都在主对角线下方,如果此信息有帮助,即a 具有以下形式

a11 a12 a13 a14 ...
NA  a22 a23 a24 ...
NA  NA  a33 a34 ...
...

目前我正在使用

a <- a - apply(a,1,function(x){max(x, na.rm=TRUE)})

(顺便说一下,它比t(apply(a,1,function(x){x-max(x, na.rm=TRUE)})) 快)。

我想知道是否有更快的解决方案,因为这个操作必须重复很多次。

在 Stackoverflow 中,我找到了类似问题的答案,建议使用 pmax,但这需要将矩阵转换为列表,这会比我的解决方案慢得多,我相信。一些答案建议使用dplyr 中的rowwise,但这似乎需要先将矩阵转换为数据框。

感谢您的建议!

【问题讨论】:

    标签: r matrix max vectorization


    【解决方案1】:

    我们可以尝试使用matrixStats包中的rowMaxs,这通常更快

    a - matrixStats::rowMaxs(a, na.rm = TRUE)
    

    【讨论】:

    • 太棒了,比apply快8倍!如果先加载matrixStats,速度会更快。谢谢。
    猜你喜欢
    • 2021-12-30
    • 2019-04-12
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多