-1
给定两个相同维数的数字矩阵A
和B
。元素明智分工的最佳方式是什么:A[i,j]/B[i,j]
?我知道有可能使用双for
循环。但我想要最有效的方法。R:基于元素的矩阵分区
编辑:当有B[i,j] == 0
它必须是A[i,j] <- 0
。
给定两个相同维数的数字矩阵A
和B
。元素明智分工的最佳方式是什么:A[i,j]/B[i,j]
?我知道有可能使用双for
循环。但我想要最有效的方法。R:基于元素的矩阵分区
编辑:当有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
。
如果你有在B
0的元素,你可能会得到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
。
我现在记得:当有'B [i,j] == 0'时我必须做什么,所以它必须是'A [i,j] < - 0'? –
我不知道我能否做到这一点(只考虑上/下选票)。但现在看起来可能。 –