2016-09-15 24 views
-1

同じ次元の2つの数値行列ABが与えられています。要素単位の分割にはどのような方法が最適ですか:A[i,j]/B[i,j]? double forループを使用することは可能です。しかし、私は最も効率的な方法が欲しい。R:要素単位の行列分割

編集:B[i,j] == 0がある場合は、A[i,j] <- 0にする必要があります。

+0

私は今、 'B [i、j] == 0'があるときに何をしなければならないので、' A [i、j] < - 0'でなければなりませんか? –

+0

私はそれができるかどうか分かりませんでした(上向き/下向きの投票のみで考える)。しかし今は可能になった。 –

答えて

6

あなたの行列が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 

それはA[i,j] <- 0なければならないだろうB[i,j] == 0があります。あなたはBで0の要素を持っている場合は

、あなたはAでその対応に応じて、NaNInfまたは-Infを得ることができます。

0/0 
# NA 

1/0 
# Inf 

-1/0 
# -Inf 

これらはすべて有限ではありません。あなたが0に置き換えるしたい場合は、単に実行します。RはNANaNInf-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.infiniteis.finiteの逆数が、is.naの逆ではありません。だから私は!is.finiteを使ったのです。

関連する問題