ND矩阵乘法,无需使用numpy.dot

时间:2019-11-15 20:30:57

标签: python numpy matrix linear-algebra

Python和编码初学者在这里。我是几天前开始学习python的,之前没有编码经验,并且已经开始学习函数。由于python对于数学运算确实非常有用,因此我尝试将其与我在线性代数课程中学习的内容联系在一起。所以这是问题。提防很多阅读!

我正在尝试使用python将两个随机矩阵相乘,而没有numpy(否则我可以使用numpy.dotnumpy.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]吗?

很抱歉,我的解释很长,我只是想分享一下自己的想法。

1 个答案:

答案 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不允许在函数名中加点。