2017-10-07 12 views
-2

この一見簡単な関数を実行しようとするとひどい時間があります。なぜこれがうまくいかないのか分かりません。Forループによる行列乗算関数

マイコード:

C = matrix(0 , dim(matrixA)[1] , dim(matrixB)[2] , TRUE) 
mat_mult = function(matrixA, matrixB){ 
for (ii in 1:dim(matrixA)[1]) { 
    for (jj in 1:dim(matrixB)[2]) { 
     for (kk in 1:dim(matrixA)[2]) { 
     C[ii,jj] = C[ii,jj] + matrixA[ii,kk]*matrixB[kk,jj] 
     } 
    } 
} 


} 

は、私はちょうど2つの行列を乗算しようとしています。何か案は?

+0

中括弧 '(1:dim(matrixA))[1]' – akrun

+0

で囲む必要があるかもしれません。あるいは、 'nrow(x)とdim(x) '' dim(。)[2] 'の' 'dim(。)[1]'と 'ncol(。より簡単で読みやすいです。 –

+0

ヘルプ( "%*%")を参照してください。 – Roland

答えて

1

あなたは行列cを宣言していない:

mat_mult = function(matrixA, matrixB){ 
c = matrix(0 , dim(matrixA)[1] , dim(matrixB)[2] , TRUE) #This line 
for (ii in 1:dim(matrixA)[1]) { 
    for (jj in 1:dim(matrixB)[2]) { 
    for (kk in 1:dim(matrixA)[2]) { 
     c[ii,jj] = c[ii,jj] + matrixA[ii,kk]*matrixB[kk,jj] 
    } 
    } 
} 
return (c) 
} 

はそれがお役に立てば幸いです。

1

あなたの過ち:

  1. 「c」は非常に重要な機能の名前であるとしてあなたは、Rには何も「C」と呼ぶべきではありません。
  2. あなたはまた、行列「C」

を返しませんでした、あなたがより良い(x)は恐ろしいインデントや一貫性のない間隔を固定し、代わりの薄暗い行列「C」

  • を初期化するために忘れてしまった[1