【发布时间】:2019-04-12 01:03:16
【问题描述】:
假设您想从相应行中减去矩阵每一行的最大值。你可以使用这样的循环来做到这一点:
# create matrix
mat <- matrix(rnorm(100),ncol=5,nrow=20)
for(i in 1:nrow(mat)){ #for each row
row.max <- max( mat[i,] ) #take the maximum of the row
mat[i,] <- mat[i,] - row.max #subtract it from the row
}
我正在考虑一种以矢量化方式执行此操作的方法,也许可以使用 max.col() ,但是,到目前为止我还想不出什么办法。有什么想法吗?
谢谢!
编辑:
感谢您的回答,我接受了(迄今为止)最快的解决方案。
Unit: microseconds
expr min lq mean median uq max neval
loop 4671.687 4906.6820 5124.78995 5019.7965 5214.5935 12318.986 100
apply 41.055 47.0430 60.58208 57.0925 71.6320 158.661 100
rowMaxs 2.139 2.9945 6.21019 5.3465 8.9810 12.402 100
do.call 111.618 125.0890 154.46904 142.4095 170.2065 422.522 100
【问题讨论】:
-
一种方法是
mat - apply(mat, 1, max)
标签: r matrix max vectorization