在矩阵的每个元素上使用max

Man*_*oon 7 r max matrix

> x <- array(-10:10, dim=c(4,5))
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]  -10   -6   -2    2    6
[2,]   -9   -5   -1    3    7
[3,]   -8   -4    0    4    8
[4,]   -7   -3    1    5    9
Run Code Online (Sandbox Code Playgroud)

如何将"max(x,0)"应用于每个元素,以便获得此矩阵:

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    2    6
[2,]    0    0    0    3    7
[3,]    0    0    0    4    8
[4,]    0    0    1    5    9
Run Code Online (Sandbox Code Playgroud)

edd*_*ddi 17

用途pmax:

pmax(x,0)
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    0    0    0    2    6
#[2,]    0    0    0    3    7
#[3,]    0    0    0    4    8
#[4,]    0    0    1    5    9
Run Code Online (Sandbox Code Playgroud)

  • @TimKuipers`pmax`保留了对象的"暗淡" - 你可能会遗漏一步或者你的`x2`不是矩形 (2认同)

Cha*_*ase 5

您可以使用R的索引功能[直接执行此操作:

x <- array(-10:10, dim=c(4,5))
x[x < 0] <- 0
Run Code Online (Sandbox Code Playgroud)

这有效,因为x < 0创建了一个逻辑矩阵输出:

x < 0

     [,1] [,2]  [,3]  [,4]  [,5]
[1,] TRUE TRUE  TRUE FALSE FALSE
[2,] TRUE TRUE  TRUE FALSE FALSE
[3,] TRUE TRUE FALSE FALSE FALSE
[4,] TRUE TRUE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

结果矩阵是:

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    2    6
[2,]    0    0    0    3    7
[3,]    0    0    0    4    8
[4,]    0    0    1    5    9
Run Code Online (Sandbox Code Playgroud)

两种方法之间的时间惊人地相似.这是一个更大的例子来说明可比较的时间:

xbigC <- xbigE <- matrix(sample(-100:100, 1e8, TRUE), ncol = 1e4)
system.time(xbigC[xbigC < 0] <- 0)
 #--- 
  user  system elapsed 
   4.56    0.37    4.93 
system.time(xbigE  <- pmax(xbigE,0))
#---
   user  system elapsed 
   4.10    0.51    4.62 
all.equal(xbigC, xbigE)
#---
[1] TRUE
Run Code Online (Sandbox Code Playgroud)