Klon Numpy

Bild

Ein kleines Modul zum Arbeiten mit Arrays in Python, ohne Bibliotheken von Drittanbietern zu verwenden (ein NumPy-Klon, aber nur in reinem Python).

Die Hausaufgaben an der Universität wurden gebeten, ein Programm zu schreiben, das die Normen und Zerlegungen der Matrix berechnet, es war jedoch verboten, Bibliotheken von Drittanbietern zu verwenden. Die Wahl der Programmiersprache ist nicht begrenzt. Ich habe mich für Python entschieden (was ein Fehler war, weil es viel langsamer als Java und C / C ++ ist) und dementsprechend kann ich NumPy nicht verwenden. Dabei musste ich Funktionen zum Ausführen von Operationen mit Arrays, Funktionen zum Auffinden von Minderjährigen, Determinanten usw. schreiben. Das Ergebnis ist eine Mini-Bibliothek zum Arbeiten mit Arrays.

Mein reiner Python-Code ist viel langsamer als NumPy, mit dem C- und Fortran-Berechnungen durchgeführt werden (außerdem ist mein Code nicht optimiert).

Was kann MatLOL:

  • Summe, Differenz und Produkt der Matrizen
  • Matrixprodukt nach Nummer
  • Matrix-Transponierung
  • Kleine Matrix
  • Matrixdeterminante
  • Inverse Matrix
  • Union Matrix
  • Matrix-Bedingungsnummer
  • Die erste, zweite (nicht abgeschlossene), euklidische und unendliche Matrixnorm
  • Lösung der Gleichung AX = B
  • LU-Zerlegung
  • Cholesky-Zersetzung
  • Seidel-Methode

MathLOL-Beispiele


Importieren Sie das Modul:

# from mathlol import * from mathlol import mathlol 

Matrix-Initialisierung

 matrix = mathlol() matrix.set([[1, 2, 3], [4, 5, 6], [7, -8, 9]]) matrix.get() #   

Einige Matrixoperationen

 matrix * 2 #     2 A = [[0, 0, 0], [0, 1, 0], [0, 0, 0]] #  2  matrix.dot(A) matrix * A matrix.transposition() #   matrix.minor(i = 0, j = 0) #   matrix.determinant() #   matrix.inverse() #   L, U = matrix.lu() # LU  matrix.seidel(b = [[5.0], [9.0], [1.0]]) #   

Es gibt auch Funktionen zum Arbeiten mit Vektoren

 vector = mathlol() vector.set([1, 2, 3, 4, 5]) vector.checkvector() # ,     vector.norm1_vector() vector.norm2_vector() vector.norm3_vector() 

Andere Beispiele

MathLOL-Leistung


Lassen Sie uns sehen, wie schnell Produkte mit Matrizen der Größe NxN berechnet werden. Matrizen werden mit Zufallszahlen von -100 bis 100 gefüllt.

Code
 from mathlol import mathlol import time import random import matplotlib.pyplot as plt #    data = {} for i in range(10, 110, 10): array = [] for i_ in range(i): temp = [] for j_ in range(i): temp.append(random.randint(-100, 100)) array.append(temp) data[i] = array #      mlol_dot = {} for key in data.keys(): matrix = mathlol() matrix.set(matrix = data[key]) start = time.process_time() result = matrix * matrix end = time.process_time() - start mlol_dot[key] = end #   plt.plot(mlol_dot.keys(), mlol_dot.values()) plt.title("MathLOL \n ") plt.xlabel("  (NxN)") plt.ylabel(" ()") 


Bild

Die Geschwindigkeit der Berechnung von Matrixproduktgrößen von 100x100 bis 1000x1000

Bild

Vergleichen Sie die Rechengeschwindigkeit von numpy und mathlol. Leider war Mathlol sehr langsam und ich entschied mich, Matrizen für Zahlenmatrixgrößen von 100x100 bis 1000x1000 und für Mathlol von 10x10 bis 100x100 zu verwenden.

Bild

MathLOL berechnete das Produkt der Matrix 100x100 für sich in 0,16 Sekunden und NumPy berechnete das Produkt der Matrix 1000x1000 für sich in 0,002 (!!!) Sekunden. Der Unterschied ist riesig.

Unsere Aufgabe bestand einfach darin, verschiedene Funktionen für die Arbeit mit Matrizen zu implementieren, die wir ausgeführt haben, aber das Programm mit großen Matrizen arbeitet nicht so schnell, wie wir es möchten. Es bleibt, das Programm zu verfeinern, ein paar weitere Funktionen hinzuzufügen (zum Beispiel eine Funktion zur Berechnung der Todd-Zahl). Ich wäre dankbar, wenn Sie sich den Code ansehen, auf Fehler hinweisen und vielleicht helfen würden, den Code zu verfeinern.

Das ist alles, der Code und die Beispiele sind auf dem Github veröffentlicht .

PS Beim Schreiben des Artikels wollte ich C / C ++ experimentieren und in mein Modul einbetten. Ich werde mich in naher Zukunft darum kümmern und sehen, wie nahe NumPys Leistung sein wird.

Source: https://habr.com/ru/post/de477308/


All Articles