Vectorización en Python

| | | | | | | | | |

La complejidad temporal de cualquier algoritmo es muy importante para decidir si una aplicación es fiable o no. Ejecutar un algoritmo grande lo más rápido posible es muy importante cuando se trata de aplicar resultados en tiempo real. Para hacer esto, Python tiene varias funciones matemáticas estándar para realizar operaciones rápidamente en matrices completas de datos sin tener que escribir bucles. Una biblioteca de este tipo que contiene dicha función es numpy . Veamos cómo podemos usar esta función estándar en el caso de la vectorización.

¿Qué es la vectorización?
La vectorización se usa para acelerar el código de Python sin usar un bucle. El uso de una función de este tipo puede ayudar a minimizar el tiempo de ejecución de su código. Se realizan varias operaciones en un vector, como el producto escalar de vectores, que también se conoce como producto escalar porque produce una sola salida, productos externos que dan como resultado en una matriz de medida cuadrada. igual a la longitud X de la longitud de los vectores, multiplicación por un elemento, que produce el producto El elemento de los índices y la dimensión de la matriz permanecen sin cambios.

Haremos vea cómo los métodos clásicos toman más tiempo que las funciones ordinarias, calculando su tiempo de procesamiento.

outer (a, b): Calcule el producto exterior de dos vectores.
multiplicar (a, b): producto matricial de dos matrices.
punto (a, b): producto escalar de dos matrices.
ceros ((n, m)): Devuelve una matriz de forma y tipo determinados, rellena con ceros.
process_time (): Devuelve el valor (en fracciones de segundo) de la suma del tiempo de CPU del sistema y del usuario del proceso actual. No incluye el tiempo transcurrido durante el sueño.

Producto escalar:
Producto escalar — es una operación algebraica en la que se multiplican dos vectores de igual longitud para que produzca un número. El producto punto a menudo se denomina producto interno . Este producto da como resultado un número escalar. Consideremos dos matrices a y b de la misma longitud, el producto punto se realiza transponiendo la primera matriz, y luego se realiza la multiplicación de la matriz matemática por a ' (transponer a) y b, como se muestra en la imagen a continuación.

Representación visual del producto escalar —

A continuación se muestra el código Python:


# Producto puntual

importar tiempo

importar numpy

import matriz


# 8 bytes int

a = matriz.matriz ( `q` )

< clase de código = "palabra clave"> para i en rango ( 100000 ):

a.append (i);


b = matriz. array ( ` q` )

para i in rango ( 100000 , 200000 ):

b.append (i)


# vectores clásicos de implementación de productos escalares

tic = tiempo.process_time ()

punto = 0.0 ;


para i en < /código> rango ( len (a)):

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


toc = tiempo.process_time ()


imprimir ( "dot_product =" + str (punto));

imprimir ( "Tiempo de cálculo =" + str ( 1000 * (toc - tic)) + "ms" )



n_tic = tiempo .process_time ()

n_dot_product = numpy.dot (a, b)

n_toc = tiempo.process_time ()


imprimir ( "n_dot_product =" + str (n_dot_product))

print ( "Tiempo de cálculo =" + str ( 1000 * (n_toc - n_tic)) + "ms" )

Salir:

dot_product = 833323333350000.0 Tiempo de cálculo = 35.59449199999999ms n_dot_p roduct = 833323333350000 Tiempo de cálculo = 0,1559900000000225ms 

Producto exterior:
Producto tensorial de dos vectores de coordenadas se llama Trabajo externo . Considere dos vectores a y b con dimensiones nx 1 y mx 1 entonces el producto exterior del vector conduce a una matriz rectangular nxm . Si dos vectores tienen la misma dimensión, entonces la matriz resultante será una matriz cuadrada, como se muestra en la figura.

Representación visual del producto externo —

A continuación se muestra el código de Python:


# Producto al aire libre

importar tiempo < /código>

importar numpy

importar matriz


a = matriz.matriz ( `i` )

para i en rango ( 200 ):

a.append (I);


b = matriz. array ( ` i` )

para i in rango ( 200 , 400 ):

b.append (i)


# implementaciones de vectores de productos externos clásicos

tic = tiempo.process_time ()

producto_externo = numpy.zeros (( 200 , 200 )) < /código>


para i en rango ( len ( a)):

for j en rango ( len (b)):

producto_externo [i] [j] = < clase de código = "simple"> a [i] * b [j]


toc = tiempo.tiempo_proceso ()


print ( "outer_product =" + str < /código> (outer_product));

imprimir ( "Tiempo de cálculo =" + str ( 1000 * (toc - tic)) + "ms" )


n_tic = tiempo.process_time ()

producto_externo = numpy.outer (a, b)

n_toc = time.process_time ()

imprimir ( "producto_externo =" + str (outer_product)) ;

imprimir ( "Tiempo de cálculo =" + str ( 1000 * (n_toc - n_tic)) + "ms" )


Salir:

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.]] Tiempo de cálculo = 39.821617ms producto_externo = [[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 79201] Tiempo de cálculo = 0.2809480000000031ms 

Producto por elementos:
Multiplicación por elementos de dos matrices — es una operación algebraica en la que cada elemento de la primera matriz es ‚Äã‚Äãmultiplicado por el elemento correspondiente en la matriz posterior. Las dimensiones de las matrices deben ser las mismas.
Considere dos matrices a y b, el índice del elemento en a — estos son i y j, entonces a (i, j) se multiplica por b (i, j) , respectivamente, como se muestra en la imagen a continuación.

Representación visual del producto inteligente Elemento —

A continuación se muestra el código Python:


# Multiplicación por elementos

importar tiempo

importar < /código> numpy

importar matriz

a = matriz.matriz ( `i` )

para i en rango ( 50000 < clase de código = "simple">):

a.append (i);


b = matriz. array ( ` i` )

para i in rango ( 50000 , 100000 ):

b.append (i)


# implementaciones clásicas de vector de producto artículo por artículo

vector = < clase de código = "simple"> numpy.zeros (( 50000 ))


tic = tiempo.process_time ()

for i in rango ( len (a)):

vector [i] = a [i] * < clase de código = "simple"> b [i]

toc = tiempo.process_time ()


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

imprimir ( "Tiempo de cálculo =" + str ( 1000 * (toc - tic)) + "ms" )



n_tic = tiempo .process_time ()

vector = numpy.multiply (a, b)

n_toc = tiempo.process_time ()


print ( "Producto inteligente del elemento =" + str (vector));

imprimir ( "Tiempo de cálculo =" + str ( 1000 * (n_toc - n_tic)) + "ms" )

Salir:

< PRE> PRODUCTOR DE PRODUCTOS SANO = [0.00000000E + 00 5.00010000E + 04 1.00004000E + 05 ..., 4.99955001E + 09 4.99970000E + 09 4.99985000E + 09] Tiempo de cálculo = 23.516678000000000013ms Elemento del elemento Producto = [0 50001 100004. .. , 704582713 704732708 704882705] Tiempo de cálculo = 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