【发布时间】:2019-02-16 16:27:48
【问题描述】:
首先,我很高兴能在 Stack Overflow 上提问,因为我一直想从事编码工作,但还没有真正开始。
我正在尝试使用 NumPy 在 Python 不 中创建矩阵乘法函数。我几乎完成了我的代码,但是每当我尝试将矩阵“A”乘以只有一列的矩阵“B”时就会出错。
我的代码如下:
import numpy as np
def matrix_multiply(A,B):
row_A = len(A)
col_A = len(A[0])
row_B = len(B)
col_B = len(B[0])
if col_A != row_B:
return("Invalid matrices")
else:
result = np.zeros((col_B,row_A))
for i in range(row_A): # iterate through columns of Y
for j in range(col_B): # iterate through rows of Y
for k in range(col_A):
result[i][j] += A[i][k]*B[k][j]
return result
我的错误是:
Traceback (most recent call last): File "<stdin>", line 1, in <module>
File "<stdin>", line 13, in matrix_multiply
IndexError: index 1 is out of bounds for axis 0 with size 1
我认为这是“result[i][j] += A[i][k]*B[k][j]”部分的问题。
我的代码适用于任何其他大小的矩阵,但是当有一列时,我得到这个索引错误。怎么回事?
这是一个例子:
A = np.array([[1,2,3],[2,3,4]])
B = np.array([[2,3],[4,5],[5,6]])
matrix_multiply(A,B)
array([[25., 31.],
[36., 45.]])
但是当我这样做时......
v = np.array([[4,3,1],[6,7,2]])
g = np.array([[3],[1],[4]])
matrix_multiply(v,g)
我得到了错误。
【问题讨论】:
-
试试
result[j][i] += A[i][k]*B[k][j]。我在result中交换了i和j。看result = np.zeros((col_B,row_A))你就会明白 -
我这样做了,但是在与 np.matmul(A,B) 进行比较时,轴被交换为点积。我应该只使用 np.swapaxes(),还是有更“优雅”的解决方案?
-
您可以将最终结果转置为
result = result.T。您没有提供任何数据来试用您的代码,因此我们只能提供建议而不是有效的答案 -
哦,抱歉,我还在学习如何提供信息和提出正确的问题。我会编辑我原来的帖子:)
标签: python matrix matrix-multiplication multiplication