
Un peque帽o m贸dulo para trabajar con matrices en Python sin usar bibliotecas de terceros (un clon NumPy, pero solo en Python puro).
Se le pidi贸 a la tarea en la universidad que escribiera un programa que calcule las normas y las descomposiciones de la matriz, pero se le prohibi贸 usar bibliotecas de terceros. La elecci贸n del lenguaje de programaci贸n no est谩 limitada. Eleg铆 python (que fue un error, porque es mucho m谩s lento que Java y C / C ++) y, en consecuencia, no puedo usar NumPy. En el proceso, tuve que escribir funciones para realizar operaciones con matrices, funciones para encontrar menores, determinantes, etc. El resultado es una mini biblioteca para trabajar con matrices.
Mi c贸digo de Python puro es mucho m谩s lento que NumPy, que hace c谩lculos de C y Fortran (adem谩s mi c贸digo no est谩 optimizado).
驴Qu茅 puede MatLOL:
- Suma, diferencia y producto de matrices.
- Producto matricial por n煤mero
- Transposici贸n de matriz
- Matriz menor
- Matriz determinante
- Matriz inversa
- Matriz de la uni贸n
- N煤mero de condici贸n de la matriz
- La primera, segunda (no finalizada), normas de matriz euclidiana e infinita
- Soluci贸n de la ecuaci贸n AX = B
- Descomposici贸n LU
- Descomposici贸n de Cholesky
- M茅todo Seidel
Ejemplos MathLOL
Importar el m贸dulo:
Inicializaci贸n de la matriz
matrix = mathlol() matrix.set([[1, 2, 3], [4, 5, 6], [7, -8, 9]]) matrix.get()
Algunas operaciones matriciales
matrix * 2
Tambi茅n hay funciones para trabajar con vectores.
vector = mathlol() vector.set([1, 2, 3, 4, 5]) vector.checkvector()
Otros ejemplosRendimiento MathLOL
Veamos la velocidad de calcular productos de matrices de tama帽o NxN. Las matrices est谩n llenas de enteros aleatorios de -100 a 100.
C贸digo from mathlol import mathlol import time import random import matplotlib.pyplot as plt

La velocidad de c谩lculo de tama帽os de productos de matriz de 100x100 a 1000x1000

Compare la velocidad computacional de numpy y mathlol. Desafortunadamente, el mathlol era muy lento en velocidad y decid铆 tomar matrices para tama帽os de matriz numpy de 100x100 a 1000x1000, y para mathlol de 10x10 a 100x100.

MathLOL calcul贸 el producto de la matriz 100x100 por s铆 mismo en 0.16 segundos, y NumPy calcul贸 el producto de la matriz 1000x1000 por s铆 mismo en 0.002 (!!!) segundos. La diferencia es enorme
Nuestra tarea era simplemente implementar varias funciones para trabajar con matrices, lo cual hicimos, pero el programa con matrices grandes no funciona tan r谩pido como nos gustar铆a. Queda por refinar el programa, agregar algunas funciones m谩s (por ejemplo, una funci贸n para calcular el n煤mero de Todd), le agradecer铆a si mira el c贸digo, se帽ala errores y tal vez ayuda a refinar el c贸digo.
Eso es todo, el c贸digo y los ejemplos se publican en el
github .
PD: En el proceso de escribir el art铆culo, quer铆a experimentar e incrustar C / C ++ en mi m贸dulo. Me ocupar茅 de esto en un futuro pr贸ximo y ver茅 qu茅 tan cerca estar谩 del rendimiento de NumPy.