矩阵乘法解释
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_1
是 m 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-algo
、ikj-algo
、psyco ikj-algo
、Numpy
或 SciPy
来完成这个。看来 Numpy 是最快最高效的。
您的代码看起来正确,您的注释看起来也正确
当我们将大小为 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_1
是 m 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-algo
、ikj-algo
、psyco ikj-algo
、Numpy
或 SciPy
来完成这个。看来 Numpy 是最快最高效的。
您的代码看起来正确,您的注释看起来也正确