Vectorisatie in Python

| | | | | | | | | |

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:


# Outdoor product

import tijd

import numpy

importeer array


a = array.array ( `i` )

voor i in bereik ( 200 ):

a.append (l);


b = array. array ( ` i` )

voor i in bereik ( 200 , 400 ):

b.append (i)


# klassieke externe productvectorimplementaties

tic = time.process_time ()

outer_product = numpy.zeros (( 200 , 200 ))


voor i in bereik ( len ( a)):

voor j in bereik ( len (b)):

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


toc = tijd.process_time ()


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

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


n_tic = tijd.process_time ()

outer_product = numpy.outer (a, b)

n_toc = tijd.process_time ()

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

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


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:
Elementsgewijze vermenigvuldiging van twee matrices — het is een algebraïsche bewerking waarbij elk element van de eerste matrix wordt ‚Äã‚Äãvermenigvuldigd met het overeenkomstige element in de latere matrix. De afmetingen van de matrices moeten hetzelfde zijn.
Beschouw twee matrices a en b, de elementindex in a — dit zijn i en j, en a (i, j) wordt vermenigvuldigd met b (i, j) , respectievelijk, zoals weergegeven in de onderstaande afbeelding.

Visuele weergave van het wijze product Element —

Hieronder staat de Python-code:


# Elementgewijze vermenigvuldiging

import tijd

import numpy

import array

a = array.array ( `i` )

voor i in bereik ( 50000 ):

a.append (i);


b = array. array ( ` i` )

voor i in bereik ( 50000 , 100000 ):

b.append (i)


# klassieke productvectorimplementaties per item

vector = numpy.zeros (( 50000 ))


tic = tijd.process_time ()

voor i in bereik ( len (a)):

vector [i] = a [i] * b [i]

toc = tijd.process_time ()


print ( "Elementsgewijs Product = " + str (vector ));

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



n_tic = tijd .process_time ()

vector = numpy.multiply (a, b)

n_toc = tijd.process_time ()


print ( "Element verstandig Product =" + str (vector));

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

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 

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method