矩阵乘法解释

Matrix multiplication explanation

当我们将大小为 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:我不是在寻找更好的代码。我的问题是关于将矩阵乘法的数学转换为代码时的思维过程。

您可以使用numpy.dot功能。这是 documentation。示例(摘自文档):

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

您的代码是正确的,但如果您想添加详细信息 comment/explanation,您可以按照您的要求添加:

 #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 评论。并将其替换为 "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 作为迭代器它看起来像 1

要进行 2 个矩阵乘法,应始终满足的条件是第一个 matrix 必须具有与另一个 matrix 具有相同数量的 rows 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 是最快最高效的。

您的代码看起来正确,您的注释看起来也正确