0

私は自然言語処理コースのデータのマトリックスを持っており、マトリックスをユークリッド正規化する必要があります。私は非常に新しいRので、自分のコードで何が間違っているのかわかりません。コードは次のとおりです。

A=matrix(
c(1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,2,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1), 
nrow=11,
ncol=10)
norm_vec <- function(x) sqrt(sum(x^2))
B=matrix(
nrow=11,
ncol=10)
for(n in 1:10)
length <- norm_vec(A[,n])
for(j in 1:11)
B[j,n]<- A[j,n]/length

このため、最後の列のみが他の列が正しいという出力が得られますが、NAなぜそうなのかわかりません。私は何を間違っていますか?

4

2 に答える 2

2

@Sathish のソリューションは完全にベクトル化できます

 A / matrix(sqrt(colSums(A*A)), nrow=11, ncol=10, byrow=TRUE)

 #          [,1] [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]      [,9]     [,10]
 #[1,] 0.5773503  0.0 0.0000000 0.4082483 0.5773503 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 #[2,] 0.5773503  0.5 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 #[3,] 0.5773503  0.5 0.5773503 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 #[4,] 0.0000000  0.5 0.0000000 0.4082483 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 #[5,] 0.0000000  0.5 0.0000000 0.8164966 0.5773503 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 #[6,] 0.0000000  0.0 0.5773503 0.0000000 0.5773503 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 #[7,] 0.0000000  0.0 0.5773503 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.7071068
 #[8,] 0.0000000  0.0 0.0000000 0.0000000 0.0000000 0.7071068 0.0000000 0.0000000 0.0000000 0.0000000
 #[9,] 0.0000000  0.0 0.0000000 0.0000000 0.0000000 0.7071068 0.7071068 0.5773503 0.7071068 0.0000000
 #[10,] 0.0000000  0.0 0.0000000 0.0000000 0.0000000 0.0000000 0.7071068 0.5773503 0.0000000 0.0000000
#[11,] 0.0000000  0.0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.5773503 0.7071068 0.7071068
于 2015-03-29T06:11:19.957 に答える
0
A=matrix(c(1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,2,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1), nrow=11,  ncol=10)

norm_vec <- function(x){ 
                 sqrt(sum(x^2))
            }

B=matrix(nrow=11, ncol=10)

Euc.lenA <- c()

for(n in 1:10){ 
   Euc.lenA <- c(Euc.lenA, norm_vec(A[,n]))
}

for(j in 1:10){
   B[,j]<- A[,j]/Euc.lenA[j]
}

Euc.lenA
[1] 1.732051 2.000000 1.732051 2.449490 1.732051 1.414214 1.414214 1.732051 1.414214 1.414214

AとB

于 2015-03-29T04:32:21.417 に答える