2017-10-07 143 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] 
     } 
    } 
} 


} 

我只是想将两个矩阵相乘在一起。有任何想法吗?

+0

您可能需要使用大括号'(1:dim(matrixA))[1]' – akrun

+0

或者使用'nrow 。)''dim(。)[1]''和'ncol(。)'代表dim(。)[2]'。它更容易,更易读。 –

+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. 你不应该叫R中的任何“C”,为“C”是非常重要的功能的名称。
  2. 你忘了初始化矩阵“C”
  3. 你没有返回矩阵“C”

此外,你最好修补可怕的缩进和不一致的间距,取而代之的暗淡(X)1 ]和dim(x)[2]更好地使用nrow(x)和ncol(x)