R 在两个矩阵中查找满足条件的索引

R 在两个矩阵中查找满足条件的索引,r,R,假设我有两个矩阵 A <-matrix(runif(100), ncol=10) B <-matrix(runif(100), ncol=10) A矩阵操作可能比转换为数据更快 r1 <- 0.3 r2 <- 0.7 C <- A < r1 & B > r2 C[] <- as.numeric(C) C # [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] # [1,]

假设我有两个矩阵

A <-matrix(runif(100), ncol=10) 
B <-matrix(runif(100), ncol=10)

A
矩阵
操作可能比转换为
数据更快

r1 <- 0.3
r2 <- 0.7
C <- A < r1 & B > r2
C[] <- as.numeric(C)
C

#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,]    0    0    0    0    0    0    0    0    0     1
# [2,]    0    0    0    0    0    0    1    0    0     0
# [3,]    0    0    0    0    0    0    0    1    0     0
# [4,]    0    0    0    0    0    0    0    1    0     0
# [5,]    0    0    0    0    0    0    0    1    0     1
# [6,]    1    0    0    0    0    0    0    0    1     0
# [7,]    0    0    0    0    1    0    0    0    0     0
# [8,]    0    0    0    0    0    0    0    0    0     0
# [9,]    0    0    0    1    0    1    0    1    0     0
#[10,]    0    0    0    0    0    0    0    0    0     0

r1我认为基本矩阵运算可能更快(实际上,对于n=10e6,它的about 6x)

set.seed(10)

A可能如下所示?单次试验在绝对值方面存在微小差异,但如果您模拟数千次重复,我认为这可能是值得的。是的,这取决于“非常大”的含义,但关键是将2个布尔矩阵相乘(计算、内存和编码)更有效。e、 g.对于n=10e8,
C[]足够公平。我可以通过在比较代码的末尾添加
+0
来解决这个问题,但是乘法可能会更简单。
set.seed(10)
A <-matrix(runif(1000000), ncol=1000) 
B <-matrix(runif(1000000), ncol=1000)

r1<-0.5
r2<-0.3

C<-(A > r1) * (B < r2) 
# timing 
A <-matrix(runif(1000000), ncol=1000) 
B <-matrix(runif(1000000), ncol=1000)



>     system.time({C <- A < r1 & B > r2
                   +     C[] <- as.numeric(C)
                   +     })
user  system elapsed 
0.06    0.00    0.06 
>     
  >     system.time(C<-(A > r1) * (B < r2))
user  system elapsed 
0.02    0.00    0.01