¿Por qué Numpy es más rápido en Python?

NumPy es un paquete fundamental de Python utilizado para manipulaciones y operaciones eficientes en funciones matemáticas de alto nivel, arrays multidimensionales, álgebra lineal, transformaciones de Fourier, capacidades de números aleatorios, etc. Proporciona herramientas para integrar código C, C++ y Fortran en Python . NumPy se usa principalmente en Python para computación científica. 

Veamos el siguiente programa que compara NumPy Arrays and Lists en Python en términos de tiempo de ejecución. 

Python3

# importing required packages
import numpy
import time
 
# size of arrays and lists
size = 1000000  
 
# declaring lists
list1 = range(size)
list2 = range(size)
 
# declaring arrays
array1 = numpy.arange(size) 
array2 = numpy.arange(size)
 
# list
initialTime = time.time()
resultantList = [(a * b) for a, b in zip(list1, list2)]
 
# calculating execution time
print("Time taken by Lists :",
      (time.time() - initialTime),
      "seconds")
 
# NumPy array
initialTime = time.time()
resultantArray = array1 * array2
 
# calculating execution time
print("Time taken by NumPy Arrays :",
      (time.time() - initialTime),
      "seconds")

Producción: 

Time taken by Lists : 1.1984527111053467 seconds
Time taken by NumPy Arrays : 0.13434123992919922 seconds

Del resultado del programa anterior, vemos que las arrays NumPy se ejecutan mucho más rápido que las listas en Python. Hay una gran diferencia entre el tiempo de ejecución de arrays y listas.

Las arrays NumPy son más rápidas que las listas de Python por las siguientes razones:  

  • Una array es una colección de tipos de datos homogéneos que se almacenan en ubicaciones de memoria contiguas. Por otro lado, una lista en Python es una colección de tipos de datos heterogéneos almacenados en ubicaciones de memoria no contiguas.
  • El paquete NumPy divide una tarea en varios fragmentos y luego procesa todos los fragmentos en paralelo.
  • El paquete NumPy integra códigos C, C++ y Fortran en Python. Estos lenguajes de programación tienen muy poco tiempo de ejecución en comparación con Python.

A continuación se muestra un programa que compara el tiempo de ejecución de diferentes operaciones en arrays NumPy y listas de Python:  

Python3

# importing required packages
import numpy
import time
  
 
# size of arrays and lists
size = 1000000 
  
# declaring lists
list1 = [i for i in range(size)]
list2 = [i for i in range(size)]
 
# declaring arrays
array1 = numpy.arange(size)
array2 = numpy.arange(size)
 
# Concatenation
print("\nConcatenation:")
 
# list
initialTime = time.time()
list1 = list1 + list2
 
# calculating execution time
print("Time taken by Lists :",
      (time.time() - initialTime),
      "seconds")
  
# NumPy array
initialTime = time.time()
array = numpy.concatenate((array1, array2),
                          axis = 0)
 
# calculating execution time
print("Time taken by NumPy Arrays :",
      (time.time() - initialTime),
      "seconds")
 
 
# Dot Product
dot = 0
print("\nDot Product:")
 
# list
initialTime = time.time()
for a, b in zip(list1, list2):
        dot = dot + (a * b)
         
# calculating execution time
print("Time taken by Lists :",
      (time.time() - initialTime),
      "seconds")
  
# NumPy array
initialTime = time.time()
array = numpy.dot(array1, array2)
 
# calculating execution time
print("Time taken by NumPy Arrays :",
      (time.time() - initialTime),
      "seconds")
 
 
# Scalar Addition
print("\nScalar Addition:")
 
# list
initialTime = time.time()
list1 =[i + 2 for i in range(size)]
 
# calculating execution time
print("Time taken by Lists :",
      (time.time() - initialTime),
      "seconds")
  
# NumPy array
initialTime = time.time()
array1 = array1 + 2
 
# calculating execution time
print("Time taken by NumPy Arrays :",
      (time.time() - initialTime),
      "seconds")
 
 
# Deletion
print("\nDeletion: ")
 
# list
initialTime = time.time()
del(list1)
 
# calculating execution time
print("Time taken by Lists :",
      (time.time() - initialTime),
      "seconds")
  
# NumPy array
initialTime = time.time()
del(array1)
 
# calculating execution time
print("Time taken by NumPy Arrays :",
      (time.time() - initialTime),
      "seconds")

Producción:

Concatenation:
Time taken by Lists : 0.02946329116821289 seconds
Time taken by NumPy Arrays : 0.011709213256835938 seconds

Dot Product:
Time taken by Lists : 0.179551362991333 seconds
Time taken by NumPy Arrays : 0.004144191741943359 seconds

Scalar Addition:
Time taken by Lists : 0.09385180473327637 seconds
Time taken by NumPy Arrays : 0.005884408950805664 seconds

Deletion: 
Time taken by Lists : 0.01268625259399414 seconds
Time taken by NumPy Arrays : 3.814697265625e-06 seconds

Del programa anterior, concluimos que las operaciones en arrays NumPy se ejecutan más rápido que las listas de Python. Además, la operación de eliminación tiene la mayor diferencia en el tiempo de ejecución entre una array y una lista en comparación con otras operaciones en el programa.
 

Publicación traducida automáticamente

Artículo escrito por riturajsaha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *