Este tutorial le enseñará a utilizar NumPy linspace( ) para crear una matriz de números espaciados uniformemente en Python.
Aprenderá la sintaxis de NumPy linspace( )
, seguida de ejemplos que le ayudarán a entender cómo utilizarla.
Nota: Para seguir este tutorial, necesita tener instalados Python y NumPy.
¿Aún no tiene NumPy? Hemos elaborado 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 NumPy instalado, siéntase libre de pasar a la siguiente sección.
- Si utiliza Google Colab,un entorno de cuaderno Jupyter basado en la nube, puede importar NumPy y empezar a codificar de inmediato. (recomendado para este tutorial ✅)
- Si desea configurar un entorno de trabajo local, le recomiendo que instale la distribución Anaconda de Python. Anaconda viene con varios paquetes útiles preinstalados. Puede descargar el instalador para su sistema operativo. El proceso de instalación sólo le llevará unos minutos.⌛
- Si ya tiene Python instalado en su ordenador, aún puede instalar la distribución Anaconda. Puede utilizar conda o pip para instalar y gestionar los paquetes. Puede ejecutar uno de los siguientes comandos desde el símbolo del sistema de Anaconda para instalar NumPy.
# Instalar NumPy usando conda
conda install numpy
# Instalar NumPy usando pip
pip install numpy
Como siguiente paso, importe numpy
bajo el alias np
ejecutando el siguiente comando. Hacer esto le ayudará a hacer referencia a NumPy como np-sin
tener que teclear numpy
cada vez que acceda a un elemento del módulo.
importar numpy como np
En adelante, utilizaremos la notación de punto para acceder a todas las funciones de la biblioteca NumPy de esta forma: np.<nombre-de-la-función>.
El caso de los números espaciados uniformemente
Cuando trabaje con matrices NumPy, habrá ocasiones en las que necesitará crear una matriz de números espaciados uniformemente en un intervalo.
Antes de seguir adelante, repasemos rápidamente otra función similar np.arange()
.
NumPy linspace() vs. NumPy arange()
Si ha utilizado NumPy antes, es probable que haya utilizado np.arange( )
para crear una matriz de números dentro de un intervalo especificado.
Sabrá que np.
arange(inicio, parada, paso)
devuelve una matriz de números desde elinicio
hasta laparada
, pero sin incluirla, en pasos depaso
; siendo el tamaño de paso por defecto 1.
Sin embargo, el valor de paso puede no ser siempre obvio. Veamos por qué es así.
Por ejemplo, si necesita 4 números espaciados uniformemente entre 0 y 1, sabrá que el tamaño del paso debe ser 0,25. Pero si utiliza np.arange()
, no incluye el valor de parada de 1. Así que 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 un número específico de puntos espaciados uniformemente en el intervalo [a, b].
Nuestro primer ejemplo de 4 puntos espaciados uniformemente en [0,1] fue bastante fácil. Ya sabe 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. En este caso, puede que el tamaño del paso no esté muy claro de inmediato. Sin embargo, en este caso puede calcular manualmente el valor del paso
.
Sin embargo, ¡np.linspace()
está aquí para simplificárselo aún más! 😄
Cuando utilice np.linspace( )
, sólo tendrá que especificar el número de puntos del intervalo, sin preocuparse del tamaño del paso. Y obtendrá de vuelta la matriz deseada.
Con esta motivación, procedamos a aprender la sintaxis de NumPy linspace ()
en la siguiente sección.
Sintaxis de NumPy linspace()
La sintaxis para utilizar NumPy linspace( )
se muestra a continuación:
np.linspace(inicio, parada, num, punto final, retstep, dtype, eje)
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 sólo un par de minutos.
Empecemos por analizar la sintaxis anterior:
start
ystop
son los puntos inicial y final del intervalo, respectivamente. Tanto start como stop pueden ser escalares o matrices. En este tutorial nos limitaremos a los valores escalares de inicio y fin.num
es el número de puntos espaciados uniformemente. Y es un parámetro opcional con un valor por defecto de 50.endpoint
es también un parámetro opcional que puede ser True o False.- El valor por defecto es True, lo que significa que el punto final se incluirá en el intervalo por defecto. Sin embargo, puede establecerlo en Falso para excluir el punto final.
retstep
es otro parámetro opcional que toma los 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 de la matriz. El tipo se infiere normalmente como float y no es necesario proporcionarlo explícitamente.axis
es otro parámetro opcional que denota el eje a lo largo del cual deben almacenarse los números. Y esto sólo es relevante cuando los valores deinicio
yfin
son arrays en sí mismos.
▶️ Entonces, ¿qué devuelve 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.
Basándonos en lo discutido hasta ahora, he aquí una sintaxis simplificada para utilizar np.linspace()
:
np.linspace(inicio, parada, num)
La línea de código anterior devolverá una matriz de
num
números espaciados uniformemente en el intervalo[inicio, parada]
.
Ahora que ya conoce la sintaxis, empecemos 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 inicio
, parada
y num
como argumentos de palabra clave. Esto se muestra en la siguiente celda de código:
import numpy as np
arr1 = np.linspace(inicio = 1,parada = 5,num = 20)
print(arr1)
# Salida:
[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 de la matriz empiezan en 1 y terminan en 5, incluyendo los dos puntos finales. Observe también cómo los números, incluidos los puntos 1 y 5, se representan como float
en la matriz devuelta.
#2. En el ejemplo anterior, usted había pasado los valores para inicio
, fin
y num
como argumentos de palabra clave. Si pasa los argumentos en el orden correcto, también podría utilizarlos como argumentos posicionales con sólo los valores, como se muestra a continuación.
importar numpy como np
arr2 = np.linspace(1,5,20)
print(arr2)
# Salida:
[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 otro array en el que pondremos retstep
a True
.
Esto significa que la función devolverá ahora tanto el array como el paso. Y podemos descomprimirlos en dos variables arr3
: el array, y step_size
: el tamaño del paso devuelto.
La siguiente celda de código explica cómo hacerlo.
importar numpy como np
arr3, tamaño_paso = np.linspace(1,5,20,retstep = True)
print(arr3)
# Salida:
[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. ]
# Salida:
print(tamaño_paso)
0.21052631578947367
#4. Como ejemplo final, establezcamos el punto final
en False
, y comprobemos qué ocurre.
importar numpy como np
arr4 = np.linspace(1,5,20,punto final = Falso)
print(arr4)
# Salida:
[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 el array devuelto, puede ver que el 1 está incluido, mientras que el 5 no lo está. Y el último valor de la matriz resulta ser 4,8, pero seguimos teniendo 20 números.
Hasta ahora, sólo hemos generado matrices de números uniformes. En la siguiente sección, vamos a visualizar trazando estos números.
Cómo trazar números espaciados uniformemente en un intervalo
En esta sección, elijamos [10,15] como intervalo de interés. Y a continuación, utilicemos np.linspace()
para generar dos matrices, cada una con 8 y 12 puntos, respectivamente.
Una vez hecho esto, podemos utilizar 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 lo demuestra.
import numpy como np
import matplotlib.pyplot as plt
N1 = 8
N2 = 12
a = 10
b = 15
y1 = np.ceros(N1)
y2 = np.ceros(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'Números uniformemente espaciados en el intervalo [{a},{b}]')
plt.xlabel('Intervalo')
plt.show()
Generar puntos espaciados uniformemente puede ser útil cuando se trabaja con funciones matemáticas. Aprenderemos sobre ello en la siguiente sección.
Cómo utilizar NumPy linspace() con funciones matemáticas
Después de haber generado una matriz de números espaciados uniformemente utilizando np.linspace()
, puede calcular los valores de las funciones matemáticas en el intervalo.
En la celda de código siguiente, primero se generan 50 puntos espaciados uniformemente en el intervalo 0 a 2π. Y después crea la matriz y
utilizando np.sin()
sobre la matriz x
. Tenga en cuenta que puede omitir el parámetro num
, ya que el valor por defecto es 50. Aún así lo utilizaremos explícitamente.
Como siguiente paso, puede trazar la función seno en el intervalo [0, 2π]. Para ello, puede utilizar matplotlib, como en el ejemplo anterior. En concreto, se utiliza la función plot()
de matplotlib .pytplot
para crear un trazado lineal.
importar numpy como np
import matplotlib.pyplot as plt
N = 50
a = 0.0
b = 2*np.pi
x = np.linspace(a, b, N)
y = np.sen(x)
plt.plot(x, y, marcador = "o")
plt.ylim([-1, 1])
plt.title(f'y = sen(x)')
plt.xlabel('x ---->
')
plt.show()
Ahora, ejecute el código anterior estableciendo N
igual a 10. Obtendrá el gráfico como se muestra en la siguiente figura.
Y puede ver que el gráfico no es muy suave, ya que sólo ha elegido 10 puntos en el intervalo.
En general, cuanto mayor sea el número de puntos que considere, más suave será el trazado de la función.
Conclusión
He aquí un resumen de lo que hemos aprendido.
- np.linspace(inicio, parada, num) devuelve una matriz de num espaciados uniformemente en el intervalo [inicio, parada].
- Establezca el parámetro opcional endpoint en False para excluir stop, y establezca el intervalo en [start, stop).
- Establezca opcionalmente retstep a True para obtener el tamaño del paso.
- Genere matrices espaciadas uniformemente utilizando np.linspace(), y luego utilice la matriz con funciones matemáticas.
Espero que ahora entienda cómo funciona np.linspace( ). Puede optar por ejecutar los ejemplos anteriores en el cuaderno Jupyter. Consulte nuestra guía sobre el cuaderno Jupyter, u otras alternativas Jupyter que puede considerar.
Nos vemos pronto en otro tutorial de Python. Hasta entonces, ¡sigan codificando!😀