NDMatrix乘法,不使用numpy.d

2024-09-28 22:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

Python和代码初学者。我几天前开始学习python,之前没有编码经验,我已经开始学习函数。因为python对于数学运算非常有用,所以我尝试将其与我在线性代数课上所学的内容联系起来。所以问题来了。当心前方的大量阅读!你知道吗

我尝试使用python将两个随机矩阵相乘,而不使用numpy(否则我可以使用numpy.dotnumpy.matrix)。如果我们有两个矩阵X和Y,它们的维数分别为axb和bxc,那么矩阵乘法只在X的列和Y的行相等时才起作用。为了写一个程序,可以做矩阵乘法,这里是我尝试。你知道吗

首先,我将我的函数定义为def mat.mul(A,B),维度分别为axb和bxc。然后把矩阵Z作为矩阵A和B的乘积,它是空的,Z = []。我的思维过程有点不稳定。我认为首先我需要一个for循环来迭代a的列,for a in range(0, len(A)):,然后是另一个for循环来迭代a的行,for b in range(len(0, X[0])),然后是另一个for循环来迭代B的列,for c in range(0, len(Y)),最后是一个for循环来迭代Y的行,for d in range(0, len(Y[0]))。现在我应该有积矩阵Z,但我不知道该怎么写。是Z += X[i] * Y[d]吗?你知道吗

抱歉,解释得太长了,我只是想我也能分享一下我的思考过程。你知道吗


Tags: 函数代码innumpy编码forlenrange
1条回答
网友
1楼 · 发布于 2024-09-28 22:15:28

纯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不允许在函数名中使用点。你知道吗

相关问题 更多 >