R:元素矩阵划分

Nel*_*ais 0 performance r matrix

给定两个数字矩阵A并且B具有相同的维度.元素划分的最佳方法是A[i,j] / B[i,j]什么?我知道可以使用双for循环.但我想要最有效的方式.

编辑:当有一个B[i,j] == 0它必须是A[i,j] <- 0.

李哲源*_*李哲源 7

如果你的矩阵是AB,你可以使用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.