NumPy linspace (): cómo crear matrices de números espaciados uniformemente

Publicado: 2022-04-11

Este tutorial le enseñará cómo usar NumPy linspace() para crear una matriz de números espaciados uniformemente en Python.

Aprenderá la sintaxis de NumPy linspace() , seguido de ejemplos que lo ayudarán a comprender cómo usarlo.

Nota: Para seguir este tutorial, debe tener Python y NumPy instalados.

¿Aún no tienes NumPy? Hemos preparado una guía de instalación rápida para usted.

¡Empecemos!

Instalar e importar NumPy

Antes de comenzar el tutorial, repasemos rápidamente los pasos para instalar la biblioteca NumPy.

Si ya tiene instalado NumPy, no dude en pasar a la siguiente sección.

  • Si usa Google Colab, un entorno de notebook Jupyter basado en la nube, puede importar NumPy y comenzar a programar de inmediato. (recomendado para este tutorial)
  • Si desea configurar un entorno de trabajo local, le recomiendo instalar la distribución Anaconda de Python. Anaconda viene con varios paquetes útiles preinstalados. Puede descargar el instalador para su sistema operativo. El proceso de configuración toma solo unos minutos.
  • Si ya tiene Python instalado en su computadora, aún puede instalar la distribución de Anaconda. Puede usar conda o pip para instalar y administrar paquetes. Puede ejecutar uno de los siguientes comandos desde el símbolo del sistema de Anaconda para instalar NumPy.
 # Install NumPy using conda conda install numpy # Install NumPy using pip pip install numpy

Como siguiente paso, importe numpy bajo el alias np ejecutando el siguiente comando. Hacer esto lo ayudará a hacer referencia a NumPy como np , sin tener que escribir numpy cada vez que acceda a un elemento en el módulo.

 import numpy as np

En el futuro, usaremos la notación de puntos para acceder a todas las funciones en la biblioteca NumPy de esta manera: np.<func-name> .

El caso de los números espaciados uniformemente

Cuando trabaja con matrices NumPy, hay momentos en los que necesitará crear una matriz de números espaciados uniformemente en un intervalo.

Antes de continuar, repasemos rápidamente otra función similar np.arange() .

NumPy linspace() frente a NumPy arange()

Si ha usado NumPy antes, probablemente haya usado np.arange() para crear una matriz de números dentro de un rango específico.

Usted sabe que np.arange(start, stop, step) devuelve una matriz de números desde el start hasta pero sin incluir stop , en pasos de step ; el tamaño de paso predeterminado es 1.

Sin embargo, el valor del paso puede no ser siempre obvio. Veamos por qué este es el caso.

Por ejemplo, si necesita 4 números espaciados uniformemente entre 0 y 1, sabe que el tamaño del paso debe ser 0,25. Pero si está utilizando np.arange() , no incluye el valor de parada de 1. Por lo tanto, tendrá que elegir un intervalo que vaya más allá del valor de parada.

La siguiente imagen ilustra algunos ejemplos más en los que necesita una cantidad específica de puntos espaciados uniformemente en el intervalo [a, b].

numpy-linspace
Puntos uniformemente espaciados en un intervalo

Nuestro primer ejemplo de 4 puntos espaciados uniformemente en [0,1] fue bastante fácil. Sabes que el tamaño del paso entre los puntos debe ser 0,25.

Supongamos que tiene un ejemplo un poco más complicado, en el que tiene que enumerar 7 puntos espaciados uniformemente entre 1 y 33. Aquí, el tamaño del paso puede no ser muy claro de inmediato. Sin embargo, puede calcular manualmente el valor del step en este caso.

Sin embargo, np.linspace() está aquí para simplificarlo aún más.

use-numpy-linspace
Utilice el espacio lineal NumPy

Cuando usa np.linspace() , solo necesita especificar la cantidad de puntos en el intervalo, sin preocuparse por el tamaño del paso. Y obtendrá la matriz como desee.

Con esta motivación, procedamos a aprender la sintaxis de NumPy linspace() en la siguiente sección.

Sintaxis de NumPy linspace()

La sintaxis para usar NumPy linspace() se muestra a continuación:

 np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

Al principio, la sintaxis anterior puede parecer muy complicada con muchos parámetros.

Sin embargo, la mayoría de ellos son parámetros opcionales y llegaremos a una sintaxis mucho más simple en solo un par de minutos.

Ahora comencemos analizando la sintaxis anterior:

  • start y stop son los puntos inicial y final del intervalo, respectivamente. Tanto start como stop pueden ser escalares o matrices. Nos limitaremos a los valores iniciales y finales escalares en este tutorial.
  • num es el número de puntos espaciados uniformemente. Y es un parámetro opcional con un valor predeterminado de 50.
  • endpoint también es un parámetro opcional que puede ser True o False.
  • El valor predeterminado es Verdadero, lo que significa que el punto final se incluirá en el intervalo de forma predeterminada. Sin embargo, puede establecerlo en False para excluir el punto final.
  • retstep es otro parámetro opcional que toma los valores booleanos True o False. Cuando se establece en True, se devuelve el valor del paso.
  • dtype es el tipo de datos de los números en la matriz. El tipo generalmente se deduce como flotante y no es necesario proporcionarlo explícitamente.
  • El axis es otro parámetro opcional que indica el eje a lo largo del cual se deben almacenar los números. Y esto es relevante solo cuando los valores de start y stop son matrices en sí mismos.

️ Entonces, ¿qué np.linspace() ?

Devuelve una matriz N-dimensional de números espaciados uniformemente. Y si el parámetro retstep se establece en True , también devuelve el tamaño del paso.

Basado en la discusión hasta ahora, aquí hay una sintaxis simplificada para usar np.linspace() :

 np.linspace(start, stop, num)

La línea de código anterior devolverá una matriz de num números espaciados uniformemente en el intervalo [start, stop] .

Ahora que conoce la sintaxis, comencemos a codificar ejemplos.

Cómo crear matrices espaciadas uniformemente con NumPy linspace ()

#1. Como primer ejemplo, vamos a crear una matriz de 20 números espaciados uniformemente en el intervalo [1, 5].

Puede especificar los valores de start , stop y num como argumentos de palabra clave. Esto se muestra en la siguiente celda de código:

 import numpy as np arr1 = np.linspace(start = 1,stop = 5,num = 20) print(arr1) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]

Observe cómo los números en la matriz comienzan en 1 y terminan en 5, incluidos ambos puntos finales. Además, observe cómo los números, incluidos los puntos 1 y 5, se representan como float en la matriz devuelta.

#2. En el ejemplo anterior, pasó los valores para start , stop y num como argumentos de palabra clave . Si pasa los argumentos en el orden correcto, también puede usarlos como argumentos posicionales con solo los valores, como se muestra a continuación.

 import numpy as np arr2 = np.linspace(1,5,20) print(arr2) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]

#3. Ahora vamos a crear otra matriz donde establezcamos retstep en True .

Esto significa que la función ahora devolverá tanto la matriz como el paso. Y podemos descomprimirlos en dos variables arr3 : la matriz y step_size : el tamaño de paso devuelto.

La siguiente celda de código explica cómo puede hacerlo.

 import numpy as np arr3, step_size = np.linspace(1,5,20,retstep = True) print(arr3) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ] # Output: print(step_size) 0.21052631578947367

#4. Como ejemplo final, establezcamos el endpoint en False y verifiquemos qué sucede.

 import numpy as np arr4 = np.linspace(1,5,20,endpoint = False) print(arr4) # Output: [1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8 4. 4.2 4.4 4.6 4.8]

En la matriz devuelta, puede ver que 1 está incluido, mientras que 5 no está incluido. Y el último valor en la matriz es 4.8, pero todavía tenemos 20 números.

Hasta ahora, solo hemos generado matrices de números espaciados uniformemente. En la siguiente sección, visualicemos trazando estos números.

Cómo graficar números espaciados uniformemente en un intervalo

En esta sección, elijamos [10,15] como el intervalo de interés. Y luego, use np.linspace() para generar dos matrices, cada una con 8 y 12 puntos, respectivamente.

Después de completar esto, podemos usar la función de trazado de la biblioteca matplotlib para trazarlos.

Para mayor claridad, sujetaremos las dos matrices de N1 = 8 y N2 = 12 puntos espaciados uniformemente en diferentes posiciones a lo largo del eje y.

El siguiente fragmento de código demuestra esto.

 import numpy as np import matplotlib.pyplot as plt N1 = 8 N2 = 12 a = 10 b = 15 y1 = np.zeros(N1) y2 = np.zeros(N2) x1 = np.linspace(a, b, N1) x2 = np.linspace(a, b, N2) plt.plot(x1, y1-0.5, 'o') plt.plot(x2, y2 + 0.5, 'o') plt.ylim([-1, 1]) plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]') plt.xlabel('Interval') plt.show()
numpy-linspace-plot

La generación de puntos espaciados uniformemente puede ser útil cuando se trabaja con funciones matemáticas. Aprenderemos sobre eso en la siguiente sección.

Cómo utilizar NumPy linspace() con funciones matemáticas

Después de generar una matriz de números espaciados uniformemente usando np.linspace() , puede calcular los valores de las funciones matemáticas en el intervalo.

En la siguiente celda de código, primero genera 50 puntos espaciados uniformemente en el intervalo de 0 a 2π. Y luego cree la matriz y usando np.sin() en la matriz x . Tenga en cuenta que puede omitir el parámetro num , ya que el valor predeterminado es 50. Seguiremos usándolo explícitamente.

Como siguiente paso, puede trazar la función seno en el intervalo [0, 2π]. Para hacer esto, puede usar matplotlib, como en el ejemplo anterior. Específicamente, la función plot() en matplotlib.pytplot se usa para crear un diagrama de líneas.

 import numpy as np import matplotlib.pyplot as plt N = 50 a = 0.0 b = 2*np.pi x = np.linspace(a, b, N) y = np.sin(x) plt.plot(x, y, marker = "o") plt.ylim([-1, 1]) plt.title(f'y = sin(x)') plt.xlabel('x ---->') plt.show()

Ahora, ejecute el código anterior estableciendo N igual a 10. Obtendrá la gráfica como se muestra en la figura a continuación.

Y puede ver que la trama no es muy fluida, ya que solo eligió 10 puntos en el intervalo.

En general, cuanto mayor sea el número de puntos que considere, más suave será el gráfico de la función.

Conclusión

Aquí hay un resumen de lo que hemos aprendido.

  • np.linspace(start, stop, num) devuelve una matriz de num números espaciados uniformemente en el intervalo [start, stop] .
  • Establezca el punto final del parámetro opcional en False para excluir stop y establezca el intervalo en [start, stop) .
  • Establezca retstep en True opcionalmente para obtener el tamaño del paso.
  • Genere matrices espaciadas uniformemente usando np.linspace() y luego use la matriz con funciones matemáticas.

Espero que ahora entiendas cómo funciona np.linspace() . Puede optar por ejecutar los ejemplos anteriores en el cuaderno Jupyter. Consulte nuestra guía sobre Jupyter Notebook u otras alternativas de Jupyter que pueda considerar.

Nos vemos pronto en otro tutorial de Python. Hasta entonces, ¡sigue programando!