Nel*_*ais 0 performance r matrix
给定两个数字矩阵A并且B具有相同的维度.元素划分的最佳方法是A[i,j] / B[i,j]什么?我知道可以使用双for循环.但我想要最有效的方式.
编辑:当有一个B[i,j] == 0它必须是A[i,j] <- 0.
如果你的矩阵是A和B,你可以使用A / B.
A <- matrix(1:4, 2, 2)
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
B <- matrix((1:4) * 2, 2, 2)
# [,1] [,2]
#[1,] 2 6
#[2,] 4 8
C <- A / B
# [,1] [,2]
#[1,] 0.5 0.5
#[2,] 0.5 0.5
Run Code Online (Sandbox Code Playgroud)
当
B[i,j] == 0它有一个它必须是A[i,j] <- 0.
如果你有0个元素B,你可能会得到NaN,Inf或者-Inf,取决于它的对应物A.
0 / 0
# NA
1 / 0
# Inf
-1 / 0
# -Inf
Run Code Online (Sandbox Code Playgroud)
所有这些都不是有限的.如果要将它们替换为0,只需执行以下操作:
C <- A / B
C[!is.finite(C)] <- 0
Run Code Online (Sandbox Code Playgroud)
这是很难记住[R如何处理NA,NaN,Inf和-Inf.您可以阅读?is.finite并?NA获取一般信息.在这里,我将给出一个简单的测试.
x <- c(NA, NaN, Inf, -Inf)
is.finite(x)
# [1] FALSE FALSE FALSE FALSE
is.infinite(x)
# [1] FALSE FALSE TRUE TRUE
is.na(x)
# [1] TRUE TRUE FALSE FALSE
is.nan(x)
# [1] FALSE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
注意,is.infinite不是倒数is.finite,而是倒数is.na.这就是我使用过的原因!is.finite.