Python和编码初学者在这里。我是几天前开始学习python的,之前没有编码经验,并且已经开始学习函数。由于python对于数学运算确实非常有用,因此我尝试将其与我在线性代数课程中学习的内容联系在一起。所以这是问题。提防很多阅读!
我正在尝试使用python将两个随机矩阵相乘,而没有numpy(否则我可以使用numpy.dot
和numpy.matrix
)。如果我们有2个分别为axb和bxc的矩阵X和Y,则仅当X的列和Y的行相等时,矩阵乘法才有效。为了编写一个可以进行矩阵乘法的程序,这是我尝试过的。
首先,我将函数定义为def mat.mul(A,B)
,其尺寸分别为axb和bxc。然后,我将矩阵Z作为矩阵A和B的乘积,Z = []
将为空。在这里,我的思维过程有些不稳定。我认为首先需要一个循环遍历A的for a in range(0, len(A)):
列的for循环,然后是另一个循环遍历A的行for b in range(len(0, X[0]))
的for循环,然后是另一个循环遍历的for循环B for c in range(0, len(Y))
的列,最后是遍历Y for d in range(0, len(Y[0]))
行的last for循环。现在,我应该具有乘积矩阵Z,但我不是应该怎么写的。是Z += X[i] * Y[d]
吗?
很抱歉,我的解释很长,我只是想分享一下自己的想法。
答案 0 :(得分:0)
纯Python中的矩阵乘法如下所示:
def matrix_multiplication(A, B):
a = len(A)
b = len(A[0])
c = len(B[0])
if b != len(B):
print (f"Wrong combination of dimensions: {a}x{b} and {len(B)}x{c}")
else:
return [[sum([A[i][k]*B[k][j] for k in range(b)])
for j in range(c)]
for i in range(a)]
A = [[1, 2, 3],
[4, 5, 6]]
B = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
print (matrix_multiplication(A, B))
结果:[[38, 44, 50, 56], [83, 98, 113, 128]]
顺便说一句,您无法命名函数mat.mul
,因为Python不允许在函数名中加点。