n 行の観測値を持つ行列があります。観測値は、特徴の度数分布です。頻度分布を、各行の合計が 1 である確率分布に変換したいと思います。したがって、行列の各要素は、要素の行の合計で除算する必要があります。
作業を行う次の R 関数を作成しましたが、大きな行列では非常に遅くなります。
prob_dist <- function(x) {
row_prob_dist <- function(row) {
return (t(lapply(row, function(x,y=sum(row)) x/y)))
}
for (i in 1:nrow(x)) {
if (i==1) p_dist <- row_prob_dist(x[i,])
else p_dist <- rbind(p_dist, row_prob_dist(x[i,]))
}
return(p_dist)
}
B = matrix(c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2)
B
[,1] [,2]
[1,] 2 1
[2,] 4 5
[3,] 3 7
prob_dist(B)
[,1] [,2]
[1,] 0.6666667 0.3333333
[2,] 0.4444444 0.5555556
[3,] 0.3 0.7
仕事をするR関数を提案したり、関数を最適化してより高速に実行する方法を教えてもらえますか?