De tijdscomplexiteit van een algoritme is erg belangrijk om te beslissen of een applicatie betrouwbaar is of niet. Het zo snel mogelijk uitvoeren van een groot algoritme is erg belangrijk als het gaat om het toepassen van realtime output. Om dit te doen, heeft Python verschillende standaard wiskundige functies voor het snel uitvoeren van bewerkingen op hele reeksen gegevens zonder lussen te hoeven schrijven. Een dergelijke bibliotheek die zo`n functie bevat, is numpy . Laten we eens kijken hoe we deze standaardfunctie kunnen gebruiken in het geval van vectorisatie.
Wat is vectorisatie?
Vectorisatie wordt gebruikt om Python-code te versnellen zonder een lus te gebruiken. Het gebruik van een dergelijke functie kan de uitvoeringstijd van uw code helpen minimaliseren. Er worden verschillende bewerkingen uitgevoerd op een vector, zoals het puntproduct van vectoren, dat ook bekend staat als het puntproduct omdat het een enkele uitvoer produceert, buitenste producten die resulteren in een vierkante meetmatrix. gelijk aan de lengte X van de lengte van vectoren, vermenigvuldiging met een element, wat het product oplevert. Het element van de indices en de dimensie van de matrix blijven ongewijzigd.
We zullen dat doen zie hoe klassieke methoden meer tijd nodig hebben dan gewone functies, door hun verwerkingstijd te berekenen.
outer (a, b): Bereken het buitenste product van twee vectoren.
vermenigvuldigen (a, b): Matrixproduct van twee arrays.
punt (a, b): Puntproduct van twee arrays.
nullen ((n, m)): Retourneer een matrix van een bepaalde vorm en type, gevuld met nullen.
process_time (): Retourneert de waarde (in fractionele seconden) van de som van de systeem- en gebruikers-CPU-tijd van het huidige proces. De tijd die tijdens de slaap is verstreken, is niet meegerekend.
Puntproduct:
Dotproduct — het is een algebraïsche bewerking waarbij twee vectoren van gelijke lengte worden vermenigvuldigd zodat er één getal ontstaat. Het Puntproduct wordt vaak een Innerlijk Product genoemd. Dit product resulteert in een scalair getal. Laten we twee matrices a en b van dezelfde lengte beschouwen, het puntproduct wordt uitgevoerd door de eerste matrix te transponeren, en dan wordt uitgevoerd de vermenigvuldiging van de wiskundige matrix door a ' (transponeer a) en b, zoals weergegeven in de onderstaande afbeelding.
Visuele weergave van het puntproduct —

Hieronder is de Python-code:
# Dot product
import
tijd
import
numpy
import
array
# 8 bytes int
a
=
array.array (
`q`
)
voor
i
in
bereik
(
100000
):
a.append (i);
b
=
array. array (
` q`
)
voor
i
in
bereik
(
100000
,
200000
):
b.append (i)
# klassieke puntproductimplementatievectoren
tic
=
time.process_time ()
punt
=
0.0
;
voor
i
in
bereik
(
len
(a)):
punt
+
=
a [i]
*
b [i]
toc
=
tijd.process_time ()
print
(
"dot_product ="
+
str
(punt));
print
(
"Berekeningstijd ="
+
str
(
1000
*
(toc
-
tic))
+
"ms"
)
n_tic
=
tijd .process_time ()
n_dot_product
=
numpy.dot (a, b)
n_toc
=
tijd.process_time ()
print
(
"n_dot_product ="
+
str
(n_dot_product))
print
(
"Berekeningstijd ="
+
str
(
1000
*
(n_toc
-
n_tic))
+
"ms"
)
Afsluiten:
dot_product = 833323333350000.0 Berekeningstijd = 35.59449199999999ms n_dot_p roduct = 833323333350000 Berekeningstijd = 0,1559900000000225ms
Buitenproduct:
Tensorproduct van twee coördinaatvectoren heet Externe werkzaamheden . Beschouw twee vectoren a en b met afmetingen nx 1
en mx 1
dan leidt het buitenste product van de vector tot een rechthoekige matrix nxm
. Als twee vectoren dezelfde afmeting hebben, zal de resulterende matrix een vierkante matrix zijn, zoals weergegeven in de figuur.
Visuele weergave van het externe product —

Hieronder staat de Python-code:
Afsluiten: 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.]] Berekeningstijd = 39.821617ms buitenste_product = [[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 79202 79401]] Berekeningstijd = 0.2809480000000031ms Elementsgewijs product: Visuele weergave van het wijze product Element — ![]() Hieronder staat de Python-code:
|
Afsluiten:
Elementsgewijze Product = [0.00000000e + 00 5.00010000e + 04 1.00004000e + 05 ..., 4.99955001e + 09 4.99970000e + 09 4.99985000e + 09] Berekeningstijd = 23.516678000000013ms Elementgewijs Product = [0 50001 100004 . .. , 704582713 704732708 704882705] Berekeningstijd = 0,2250640000000248ms