R:元素矩阵划分

时间:2016-09-15 20:34:01

标签: r performance matrix

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

修改:如果有B[i,j] == 0,则必须为A[i,j] <- 0

1 个答案:

答案 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
  

如果有B[i,j] == 0,则必须为A[i,j] <- 0

如果B中有0个元素,则可能会NaNInf-Inf,具体取决于A中的对应元素。

0 / 0
# NA

1 / 0
# Inf

-1 / 0
# -Inf

所有这些都不是有限的。如果要将它们替换为0,只需执行:

C <- A / B
C[!is.finite(C)] <- 0

很难记住R如何对待NANaNInf-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

的原因