Vektorisierung in Python

| | | | | | | | | | | | | | | | | | | | | | |

Die Zeitkomplexität jedes Algorithmus ist sehr wichtig bei der Entscheidung, ob eine Anwendung zuverlässig ist oder nicht. Das schnellstmögliche Ausführen eines großen Algorithmus ist sehr wichtig, wenn es um die Anwendung von Echtzeitausgaben geht. Zu diesem Zweck verfügt Python über mehrere mathematische Standardfunktionen zum schnellen Ausführen von Operationen an ganzen Datenarrays, ohne dass Schleifen geschrieben werden müssen. Eine solche Bibliothek, die eine solche Funktion enthält, ist numpy . Mal sehen, wie wir diese Standardfunktion im Fall der Vektorisierung verwenden können.

Was ist Vektorisierung?
Die Vektorisierung wird verwendet, um den Python-Code zu beschleunigen, ohne eine Schleife zu verwenden. Die Verwendung einer solchen Funktion kann dazu beitragen, die Ausführungszeit Ihres Codes zu minimieren. An einem Vektor werden verschiedene Operationen durchgeführt, wie z. B. das Punktprodukt von Vektoren, das auch als Punktprodukt bekannt ist, weil es eine einzige Ausgabe erzeugt, die äußere Produkte ergibt in einer quadratischen Messmatrix. gleich der Länge X der Länge der Vektoren, Multiplikation mit einem Element, was das Produkt ergibt. Das Element der Indizes und die Dimension der Matrix bleiben unverändert.

Wir werden Sehen Sie, wie klassische Methoden länger brauchen als gewöhnliche Funktionen, indem Sie ihre Verarbeitungszeit berechnen.

outer (a, b): Berechnen Sie das äußere Produkt zweier Vektoren.
multiplizieren (a, b): Matrixprodukt zweier Arrays.
Punkt (a, b): Punktprodukt zweier Arrays.
Nullen ((n, m)): Gibt eine Matrix gegebener Form und Typs zurück, gefüllt mit Nullen.
process_time (): Gibt den Wert (in Bruchteilen von Sekunden) der Summe der System- und Benutzer-CPU-Zeit des aktuellen Prozesses zurück. Die während des Schlafs verstrichene Zeit ist nicht enthalten.

Punktprodukt:
Punktprodukt — Es ist eine algebraische Operation, bei der zwei Vektoren gleicher Länge multipliziert werden, sodass eine Zahl entsteht. Das Skalarprodukt wird oft als inneres Produkt bezeichnet. Dieses Produkt ergibt eine skalare Zahl. Betrachten wir zwei Matrizen a und b gleicher Länge, das Skalarprodukt wird durch Transponieren der ersten Matrix durchgeführt, und dann wird durchgeführt die Multiplikation der mathematischen Matrix durch a ' (transponiert a) und b,, wie im Bild unten gezeigt.

Visuelle Darstellung des Skalarprodukts —

Hier unten ist der Python-Code:


# Punktprodukt

import time

import numpy

import array


# 8 bytes int

a = array.array ( `q` )

für i im Bereich ( 100000 ):

a.append (i);


b = array. array ( ` q` )

for i im Bereich ( 100000 , 200000 ):

b.append (i)


# klassische Punktproduktimplementierungsvektoren

tic = time.process_time ()

dot = 0.0 ;


für i in range ( len (a)):

dot + = a [i] * b [i]


toc = time.process_time ()


print ( "dot_product =" + str (Punkt));

print ( "computation time =" + str ( 1000 * (toc - tic)) + "ms" )



n_tic = time .process_time ()

n_dot_product = numpy.dot (a, b)

n_toc = time.process_time ()


print ( "n_dot_product =" + str (n_dot_product))

print ( "Rechenzeit =" + str ( 1000 * (n_toc - n_tic)) + "ms" )

Exit:

dot_product = 833323333350000,0 Rechenzeit = 35,59449199999999 ms n_dot_p Produkt = 833323333350000 Rechenzeit = 0,15599000000000225 ms 

Outdoor-Produkt:
Tensorprodukt zweier Koordinatenvektoren heißt Externe Arbeit . Betrachten wir zwei Vektoren a und b mit den Dimensionen nx 1 und mx 1 dann führt das äußere Produkt des Vektors zu eine rechteckige Matrix nxm . Wenn zwei Vektoren dieselbe Dimension haben, ist die resultierende Matrix eine quadratische Matrix, wie in der Abbildung gezeigt.

Visuelle Darstellung des externen Produkts —

Unten ist der Python-Code:


# Outdoor-Produkt

import time

import numpy

import array


a = array.array ( `i` )

für i in Bereich ( 200 ):

a.append (ich);


b = array. array ( ` i` )

for i im Bereich ( 200 , 400 ):

b.append (i)


# klassische externe Produktvektorimplementierungen

tic = time.process_time ()

äußeres_produkt = numpy.zeros (( 200 , 200 ))


für i in range ( len ( a)):

für j in range ( len (b)):

outer_product [i] [j] = a [i] * b [j]


toc = time.process_time ()


print ( "outer_product =" + str (outer_product));

print ( "computation time =" + str ( 1000 * (toc - tic)) + "ms" )


n_tic = time.process_time ()

outer_product = numpy.outer (a, b)

n_toc = time.process_time ()

print ( "outer_product =" + str (outer_product)) ;

print ( "computation time =" + str ( 1000 * (n_toc - n_tic)) + "ms" )


Exit:

outer_product = [[0. 0. 0. ... , 0. 0. 0.] [200.201.202. ... , 397. 398. 399.] [400. 402. 404. ... , 794. 796. 798.] ..., [39400. 39597. 39794. ... , 78209. 78406. 78603. ] [39600. 39798. 39996. ... , 78606. 78804. 79002.] [39800. 39999. 40198. ... , 79202. 79401.]] Rechenzeit = 39,821617 ms äußeres_Produkt = [[0 0 0 ..., 0 0 0] [200 201 202 ..., 397 398 399] [400 402 404 ..., 794 79 6 798] ..., [39400 39597 39794 ..., 78209 78406 78603] [39600 39798 39996 ..., 78606 78804 79002] [39800 39999 40198 ..., 79003 7401]] Rechenzeit = 0,2809480000000031 ms 

Elementweises Produkt:
Elementweise Multiplikation zweier Matrizen — es ist eine algebraische Operation, bei der jedes Element der ersten Matrix mit dem entsprechenden Element in der späteren Matrix multipliziert wird. Die Dimensionen der Matrizen müssen gleich sein.
Betrachten Sie zwei Matrizen a und b, den Elementindex in a — das sind i und j, dann wird a (i, j) mit b (i, j) multipliziert , wie im Bild unten gezeigt.

Visuelle Darstellung des Wise-Produkt-Elements —

Unten ist der Python-Code:


# Elementweise Multiplikation

import time

import numpy

import array

a = array.array ( `i` )

für i in Bereich ( 50000 ):

a.append (i);


b = array. array ( ` i` )

for i im Bereich ( 50000 , 100000 ):

b.append (i)


# klassische Artikel-für-Artikel-Produktvektorimplementierungen

vector = numpy.zeros (( 50000 ))


tic = time.process_time ()

for i in range ( len (a)):

Vektor [i] = a [i] * b [i]

toc = time.process_time ()


print ( "Elementweise Produkt = " + str (vector ));

print ( "computation time =" + str ( 1000 * (toc - tic)) + "ms" )



n_tic = time .process_time ()

vector = numpy.multiply (a, b)

n_toc = time.process_time ()


print ( "Elementweises Produkt =" + str (Vektor));

print ( "computation time =" + str ( 1000 * (n_toc - n_tic)) + "ms" )

Exit:

< Pre> Element Wise Produkt = [0.00000000E + 00 5.00010000E + 04 1.00004000e + 05 ..., 4.99955001e + 09 4.99970000de + 09 4.99985000e + 09] Rechenzeit = 23.516678000000013ms Element Wise Produkt = [0 50001 100004. .. , 704582713 704732708 704882705] Rechenzeit = 0,2250640000000248 ms