
一个小模块,用于在Python中使用数组而不使用第三方库(NumPy克隆,但仅在纯Python中)。
该大学的作业被要求编写一个程序来计算矩阵的范数和分解,但被禁止使用第三方库。 编程语言的选择不受限制。 我选择了python(这是一个错误,因为它比Java和C / C ++慢得多),因此我不能使用NumPy。 在此过程中,我不得不编写用于执行数组操作的函数,用于查找未成年人,行列式的函数等。 结果是一个用于处理数组的迷你库。
我的纯Python代码比NumPy慢得多,后者执行C和Fortran计算(加上我的代码未优化)。
MatLOL可以做什么:
- 矩阵的总和,差和积
- 矩阵产品的数量
- 矩阵转置
- 次矩阵
- 矩阵行列式
- 逆矩阵
- 联合矩阵
- 矩阵条件编号
- 第一,第二(未最终确定),欧几里得和无限矩阵范数
- 方程AX = B的解
- LU分解
- 胆固醇分解
- 赛德尔法
MathLOL示例
导入模块:
矩阵初始化
matrix = mathlol() matrix.set([[1, 2, 3], [4, 5, 6], [7, -8, 9]]) matrix.get()
一些矩阵运算
matrix * 2
还有用于向量的功能
vector = mathlol() vector.set([1, 2, 3, 4, 5]) vector.checkvector()
其他例子MathLOL性能
让我们看看计算大小为NxN的矩阵的乘积的速度。 矩阵由-100到100的随机整数填充。
代号 from mathlol import mathlol import time import random import matplotlib.pyplot as plt

计算矩阵产品尺寸从100x100到1000x1000的速度

比较numpy和mathlol的计算速度。 不幸的是,mathlol的速度非常慢,我决定对numpy使用尺寸从100x100到1000x1000的矩阵,对mathlol使用10x10到100x100的矩阵。

MathLOL在0.16秒内自行计算出矩阵100x100的乘积,而NumPy在0.002(!!!)秒内计算出矩阵1000x1000的乘积。 区别是巨大的。
我们的任务只是实现用于矩阵的各种功能,而我们所做的只是,但是使用大型矩阵的程序的运行速度不尽人意。 仍然需要完善程序,添加更多功能(例如,用于计算Todd数的功能),如果您看一下代码,指出错误并可能有助于完善代码,我将不胜感激。
仅此
而已 ,代码和示例已发布在
github上 。
PS在撰写本文的过程中,我想进行实验并将C / C ++嵌入到我的模块中。 我会在不久的将来解决这个问题,看看它与NumPy的表现有多接近。