矩阵乘法解释

时间:2017-08-01 16:07:32

标签: python algorithm matrix matrix-multiplication

当我们将两个大小为m x k的矩阵A和大小为k x n的B相乘时,我们使用以下代码:

  #for resultant matrix rows
  for i in range(m):
    #for resultant matrix column
    for j in range(n):
      for l in range(k):
        #A's row x B's columns
        c[i][j]=c[i][j]+a[i][l]*b[l][j]

是我在循环的代码正确解释中的注释?是否有更好的循环解释或是否有更好的思维过程来编码矩阵乘法?

EDIT1:我不是在寻找更好的代码。我的问题是关于当我们将矩阵乘法的数学转换成代码时的思维过程。

3 个答案:

答案 0 :(得分:1)

您的代码是正确的,但如果您想添加详细评论/解释,请问您可以这样做:

 #for resultant matrix rows
  for i in range(m):
    #for resultant matrix column
    for j in range(n):
      #for each entry in resultant matrix we have k entries to sum
      for l in range(k):
        #where each i, j entry in the result matrix is given by multiplying the 
        #entries A[i][l] (across row i of A) by the entries B[l][j] (down 
        #column j of B), for l = 1, 2, ..., k, and summing the results over l:
        c[i][j]=c[i][j]+a[i][l]*b[l][j]

编辑:如果您想要更好地解释循环或思考过程而不是取出#A's row x B's columns条评论。并将其替换为"其中结果矩阵中的每个i,j条目通过将条目A [i] [l](跨越A的行i)乘以条目B [l] [j](向下)来给出B)的列j,对于l = 1,2,...,k,并且将结果加总为"也不要使用l作为迭代器,它看起来像1

答案 1 :(得分:0)

您可以使用numpy.dot功能。这是documentation。示例(从文档中提取):

> a = [[1, 0], [0, 1]]
> b = [[4, 1], [2, 2]]
> np.dot(a, b)
> array([[4, 1],
        [2, 2]])

答案 2 :(得分:0)

为了进行2个矩阵乘法而应该始终存在的条件是,第一个matrix必须与另一个rows matrix具有相同的columns量。

因此,如果matrix_1m x n而非matrix_2应为n x p。两者的结果将具有m x p

的维度

Pseudocode将是:

multiplyMatrix(matrix1, matrix2)

-- Multiplies rows and columns and sums them
  multiplyRowAndColumn(row, column) returns number
  var
    total: number
  begin
    for each rval in row and cval in column
    begin
       total += rval*cval
    end
    return total
  end

begin

-- If the rows don't match up then the function fails

  if matrix1:n != matrix2:m  return failure;

  dim    = matrix1:n   -- Could also be matrix2:m
  newmat = new squarematrix(dim)  -- Create a new dim x dim matrix
  for each r in matrix1:rows and c in matrix2:columns
  begin

  end
end

在python中,您可以执行您所做的操作,也可以使用ijk-algoikj-algopsyco ikj-algoNumpySciPy来完成此操作。 Numpy似乎是最快,最有效的。

您的代码看起来正确,您的评论也应该看得正确