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
当
B[i,j] == 0它有一个它必须是A[i,j] <- 0.
如果你有0个元素B,你可能会得到NaN,Inf或者-Inf,取决于它的对应物A.
0 / 0
# NA
1 / 0
# Inf
-1 / 0
# -Inf
所有这些都不是有限的.如果要将它们替换为0,只需执行以下操作:
C <- A / B
C[!is.finite(C)] <- 0
这是很难记住[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
注意,is.infinite不是倒数is.finite,而是倒数is.na.这就是我使用过的原因!is.finite.
| 归档时间: | 
 | 
| 查看次数: | 9735 次 | 
| 最近记录: |