构建矩阵模块
Numpy是一个有用的库,使您可以创建矩阵并轻松执行矩阵操作。但是,如果您想创建一个具有Numpy库中未包含的功能的矩阵类,该怎么办? 为此,我们首先应该首先了解如何构建矩阵类,该矩阵类使我们能够创建具有矩阵基本功能的矩阵,例如打印,矩阵加法,标量,逐元素或矩阵乘法, 有权访问并设置条目。
类
创建一个类允许创建一种对象类型的新实例。 每个类实例可以具有不同的属性和方法。 因此,使用类将使我们能够创建具有矩阵属性和多个功能的实例。 例如,如果A = [[2,1],[2,3]],B = [[0,1],[2,1]],则A+B应该给我们矩阵[[2,3],[ 4,4]]。
__method__是私有方法。 即使您不能直接调用私有方法,Python中的类中的这些内置方法也会使编译器知道在执行特定功能或操作时要访问哪个方法。 您只需要使用正确的方法来实现目标即可。
矩阵类
创建并打印矩阵对象
我们要在类上实现的目标如下
因此,我们要创建一个具有dim和fill参数的Matrix对象。
我们使用__init__作为构造函数来初始化类的属性(行,列和矩阵A)。 行和列由矩阵的第一维和第二维分配。 创建矩阵A时,将fill作为值,将self.cols和self.rows作为矩阵的形状。
我们还应该创建一个__str__方法,使我们能够像上面那样打印可读格式。
定标器和矩阵加法
标准矩阵矩阵加法
定标器矩阵加法(逐点)
我们使用__add__方法执行正确的加法。
由于加法是可交换的,我们还希望能够在矩阵的右侧进行加法。可以通过调用左边的加法轻松地完成此操作。
点向乘法
矩阵-矩阵逐点乘法
定标器矩阵逐点乘法
使用__mul__和__rmul__方法逐点执行左右
标准矩阵-矩阵乘法
可以通过专用于矩阵乘法的__matmul__方法来实现矩阵乘法。
可以访问并设置条目
使用__setitem__方法设置矩阵索引的值,并使用__getitem__方法获取矩阵索引的值。
整合上述代码
使用类模块
创建Matrix类之后,是时候将其转换为模块了。 将包含该类的文本重命名为__init__.py。 创建一个名为Matrix的文件夹。 Putmain.py和此文件夹内的另一个名为linearAlgebra的文件。 将__init__.py文件放在linearAlgebra文件中。
使用main.py导入和使用我们的Matrix类。
Cython vs NumPy
我们创建了维度为100x100、200x200,…,500x500的矩阵。 我们可以看到,Python函数的时间随着维度的增加而呈指数增长,而Numpy可以在几秒钟内完成计算。 如果Numpy还是一个Python库,它的性能如何比我们的Python实现好得多?
源代码
详情参阅 - 亚图跨际