一篇文章带你了解矩阵乘法的纯Python实现
在《这篇文章》中,我们有简单提到“矩阵乘法”的相关知识,如果你不记得了,可以复习一下这张图片。
想起来了没?本篇文章将深入探讨在没有机器学习库的情况下如何从零实现矩阵乘法!
你有没有想过在没有任何复杂的机器学习库的情况下处理机器学习问题?毕竟多亏了那些模块,才可以让我们的某些操作几乎可以在眨眼之间完成。
为了真正欣赏这些模块的美观和优雅,让我们从头开始进行代码矩阵乘法,而无需任何机器学习库或模块。尽管这不是一个非常复杂的任务,但这将有助于我们更好地学习核心概念并理解NumPy的重要性,它只需几行代码即可完成同一任务。
解决这个问题的方法是从用户那里获取所有输入。这是第一个和第二个矩阵的行数和列数。另外,根据每个矩阵的行数和列数,我们将分别填充相应的替代位置。
在进行任何矩阵乘法之前,第一步是检查两个矩阵之间的这种运算是否真的可行。这可以通过检查第一个矩阵的列数是否等于第二个矩阵中的行数来判断。这可以表述为:
矩阵A的行数 = 矩阵B的列数
根据这个策略,我们可以制定我们的第一个代码块。这可以按如下所示:
r1 = int(input("Enter No of rows of 1st Matrix: "))c1 = int(input("Enter No of columns of 1st Matrix: "))r2 = int(input("Enter No of rows of 2nd Matrix: "))c2 = int(input("Enter No of columns of 2nd Matrix: "))# for matrix multiplication to be possible no of columns in matrix 1 = no of rows in matrix 2if c1==r2:else: print("\nNot possible")
这部分看起来非常简单。我们制定了仅在需要时执行矩阵运算的计划。现在,让我们看一下如何接收相应行和列的输入。
在继续之前,让我们提出一个我们正在努力解决的问题。下图是我们必须解决的问题。我采用了一种更简单的3 * 3和3 * 3矩阵组合,但我保证这种方法可以解决任何复杂的问题,即第一个矩阵的列与第二个矩阵的行匹配。
下图显示了相应的行数和列数:
现在,我们还制定了问题陈述,让我们从用户那里获得所需的输入,然后开始着手解决这个问题。这可以使用下面的代码中完成:
mat1 = [] mat2 = [] result = [] print("\nEnter The Values in the matrix 1: ") for i in range(r1): g=[] for j in range(c1): g.append(int(input())) mat1.append(g) for i in range(r1): for j in range(c1): print(mat1[i][j], end = " ") print()
在这里,我展示了如何遍历行和列以输入第一个矩阵的值。同样,您也可以对第二个矩阵重复这些步骤。完成此步骤后,您的输出应如下所示:
现在我们已经成功地完成了所有必需的输入。是时候循环这些值并开始计算它们了。所以,为了阐明矩阵乘法是如何工作的,我们将行与它们各自的列相乘。
矩阵的第一个值如下所示:
(1*1) + (2*4) + (3*7) = (1) + (8) + (21) = 30
可以使用以下代码完成此操作:
for r in range(r1): u=[] for s in range(c2): u.append(int(0)) result.append(u) for r in range(r1): for s in range(c2): result[r][s] print("\nResult is: \n") # iterate through rows of r1 for x in range(len(mat1)): # iterate through columns of c2 for y in range(len(mat2[0])): # iterate through rows of r2 for z in range(len(mat2)): result[x][y] += mat1[x][z] * mat2[z][y] for r in result: print(r)
这段代码将相应地计算结果,然后得到最终输出,如下所示:
下图显示了已完成的相同计算。
现在,我们完成了与矩阵乘法的计算。但是,我很好奇这在numpy上如何工作。让我们看看——
使用Numpy的实现过程:
在仅使用python成功完成了矩阵乘法的工作之后,我们现在可以看看带有numpy模块的类似公式的样子。可以按照以下步骤进行:
import numpy as npa1 = np.array([[1,2,3], [4,5,6], [7,8,9]])a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])Answer = np.matmul(a1,a2)Answer
通过对比发现:使用Numpy进行操作时,几乎没有太多个人的操作,我们只需要知道在numpy中是如何计算的即可。但是至少让我们了解到了一些新的东西:体会到我们使用的机器学习库是多么美妙。
结论:
我们发现,如果不使用现有的出色的机器学习库,即使是仅需几行代码即可完成的简单任务(如矩阵乘法),也将花费更长的时间来执行。但是,尽管如此,理解核心基础知识和理解这些操作是如何执行的仍然很重要,我们在本文中确实做到了这一点。在本文中,我们研究了如何在不使用任何库的情况下对矩阵乘法进行编程。
· END ·
HAPPY LIFE