在矩阵中用零替换负数

时间:2013-05-22 03:12:27

标签: r

所以今天我编写了一些我希望用0替换矩阵中所有负值的东西。调用这个矩阵B.这没问题,我刚写了

B[which(B<0)]=0

然而,仅仅因为我很好奇,我在想,如果我们摆脱了哪个并写了怎么办

B[B<0]=0

令我惊讶的是,这也得到了同样的答案。如果我在Stack Overflow上查找这个问题,第二个答案是非常标准的(还有更复杂的更快的方法),但我的问题是:上面的两个方法实际上是一样的吗? B <0返回布尔矩阵。哪种方法更快,为什么?

2 个答案:

答案 0 :(得分:2)

是的,您可以使用逻辑向量进行索引。这里解释了:http://cran.r-project.org/doc/manuals/r-release/R-intro.html#Index-vectors

答案 1 :(得分:2)

关于速度问题,我尝试的测试似乎没有太大差异。例如,

B=.5-matrix(runif(10000),100,100) 

start = Sys.time()  
replicate(50000,B[B<0])
speed = Sys.time () - start

25.85秒

start = Sys.time()  
replicate(50000,B[which(B<0)])
speed = Sys.time () - start

25.91秒