-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'? –
我不知道我能否做到這一點(只考慮上/下選票)。但現在看起來可能。 –