当我们将两个大小为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:我不是在寻找更好的代码。我的问题是关于当我们将矩阵乘法的数学转换成代码时的思维过程。
答案 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_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似乎是最快,最有效的。
您的代码看起来正确,您的评论也应该看得正确