R 在矩阵的每个元素上使用max
使用R 在矩阵的每个元素上使用max,r,matrix,max,R,Matrix,Max,使用pmax: [,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 您可以使用R的索引功能[直接执行此操作: pmax(x,0) # [,1] [,2] [,3] [,4] [,5] #[1,] 0 0 0 2
pmax
:
[,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
您可以使用R的索引功能
[
直接执行此操作:
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
这两种方法之间的时间安排惊人地相似。下面是一个更大的示例,说明了可比较的时间安排:
[,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
xbigC当输入为矩阵时,pmax()
的参数顺序似乎会影响返回内容的类别:
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
@ManinMon-是的,不用担心。直接索引方法将更灵活,因为您可以使用其他逻辑运算符创建更复杂的条件。对于此任务,似乎pmax()
的效率更高。这对我不起作用。我做了>x=read.csv(…)>x2=sapply(data,atanh)>pmax(x2,-20)
但是这产生了一个-20
的向量,而不是原始维度的矩阵。(注意>类(x2)[1]“矩阵”
即使>类(x)[1]“data.frame”
)@Chase他的解决方案确实有效。@TimKuiperspmax
保留了对象的dim
-你可能遗漏了一个步骤,或者你的x2
不是矩形不。我犯的错误是,由于我的矩阵非常大,我尝试通过做x2[1:10]
而不是x2[1:10]来查看它的一部分
。我很抱歉!@TimKuipers np,很高兴你找到了答案
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
[,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
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
pmax(0,x)
[1] 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
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