-1
同じ次元の2つの数値行列A
とB
が与えられています。要素単位の分割にはどのような方法が最適ですか:A[i,j]/B[i,j]
? double for
ループを使用することは可能です。しかし、私は最も効率的な方法が欲しい。R:要素単位の行列分割
編集:B[i,j] == 0
がある場合は、A[i,j] <- 0
にする必要があります。
同じ次元の2つの数値行列A
とB
が与えられています。要素単位の分割にはどのような方法が最適ですか:A[i,j]/B[i,j]
? double 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
それは
A[i,j] <- 0
なければならないだろうB[i,j] == 0
があります。あなたはB
で0の要素を持っている場合は
、あなたはA
でその対応に応じて、NaN
、Inf
または-Inf
を得ることができます。
0/0
# NA
1/0
# Inf
-1/0
# -Inf
これらはすべて有限ではありません。あなたが0に置き換えるしたい場合は、単に実行します。RはNA
、NaN
、Inf
と-Inf
をどのように扱うかを覚えておくことは困難である
C <- A/B
C[!is.finite(C)] <- 0
。一般的な情報は?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'でなければなりませんか? –
私はそれができるかどうか分かりませんでした(上向き/下向きの投票のみで考える)。しかし今は可能になった。 –