Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 14 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

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

Aprenderás la sintaxis de NumPy linspace()seguido de ejemplos que te ayudarán a entender cómo utilizarlo.

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

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

¡Empecemos!

Instalar e importar NumPy

Antes de empezar el tutorial, vamos a repasar rápidamente los pasos para instalar la librería NumPy.

⏩ Si ya tienes instalado NumPy, siéntete libre de saltar a la siguiente sección.

  • Si utiliza Google Colab-basado en la nube Cuaderno Jupyter puedes importar NumPy y empezar a programar inmediatamente. (recomendado para este tutorial ✅)
  • Si quieres crear un entorno de trabajo local, te recomiendo que instales la distribución Anaconda de Python. Anaconda viene con varios paquetes útiles preinstalados. Puedes descargar el instalador para tu sistema operativo. El proceso de instalación sólo lleva unos minutos.
  • Si ya tiene Python instalado en su ordenador, puede instalar la distribución Anaconda. Puede utilizar conda o pip para instalar y gestionar 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

A continuación, importe numpy con 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.

import numpy as np

En adelante, usaremos la notación punto para acceder a todas las funciones de la librería NumPy de esta forma: np.<func-name>.

Números espaciados uniformemente

Cuando trabaje con Matrices NumPyhay ocasiones en las que necesitarás 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() vs. NumPy arange()

Si has utilizado NumPy antes, es probable que hayas utilizado np.arange() para crear una matriz de números dentro de un rango especificado.

Sabes que np.arange(start, stop, step) devuelve una matriz de números de start hasta stopen pasos de stepel tamaño de paso por defecto es 1.

Sin embargo, el valor de step no siempre es evidente. 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. 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 se necesita un número específico de puntos espaciados uniformemente en el intervalo [a, b].

numpy-linspace
Puntos espaciados uniformemente en un intervalo

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

Suponga 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, el tamaño del paso puede no estar claro de inmediato. En este caso, es posible que el tamaño del paso no esté muy claro de inmediato. Sin embargo, puede calcular manualmente el valor de step en este caso.

Sin embargo, np.linspace() ¡está aquí para hacértelo aún más sencillo! 😄

use-numpy-linspace
Utilizar NumPy linspace

Al utilizar np.linspace()sólo tiene que especificar el número de puntos en el intervalo, sin preocuparse por el tamaño del paso. Y obtendrás la matriz como desees.

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

Sintaxis de NumPy linspace()

La sintaxis para utilizar 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 opcional y llegaremos a una sintaxis mucho más sencilla en un par de minutos.

Empecemos por analizar la sintaxis anterior:

  • start y stop 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 también es 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 False 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 suele inferirse como float y no es necesario indicarlo explícitamente.
  • axis es otro parámetro opcional que indica el eje a lo largo del cual deben almacenarse los números. Y esto es relevante sólo cuando el start y el stop son matrices.

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

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

Sobre la base de lo debatido hasta ahora, he aquí una sintaxis simplificada que puede utilizarse 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 ya conoces la sintaxis, vamos a empezar 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, stopy num como argumentos de palabra clave. Esto se muestra en la celda de código siguiente:

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.        ]

Observa cómo los números de la matriz empiezan en 1 y terminan en 5, incluyendo los dos puntos finales. Observa 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, se habían introducido los valores de start, stopy num como argumentos clave. Si pasas los argumentos en el orden correcto, también puedes usarlos como argumentos posicionales con sólo 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 otro array donde pondremos retstep a True.

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

La siguiente celda de código explica cómo 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 último ejemplo, pongamos endpoint a Falsey comprueba lo que ocurre.

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, se puede ver que 1 está incluido, mientras que 5 no está incluido. 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 espaciados uniformemente. 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 aplicación matplotlib biblioteca 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 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

Generar puntos uniformemente espaciados 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()puedes calcular los valores de funciones matemáticas en el intervalo.

En la celda de código siguiente, primero se generan 50 puntos espaciados uniformemente en el intervalo de 0 a 2π. Y luego crear la matriz y utilizando np.sin() en la matriz x. Tenga en cuenta que puede omitir el num ya que el valor por defecto es 50. Aún así lo utilizaremos explícitamente.

Como siguiente paso, puedes trazar la función seno en el intervalo [0, 2π]. Para ello, puedes utilizar matplotlibcomo en el ejemplo anterior. En concreto, el plot() función en matplotlib.pytplot se utiliza para crear un gráfico 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ás el gráfico que 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 considerado, más suave será el gráfico de la función.

Conclusión

He aquí 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 parámetro opcional endpoint a False excluir stopy ajuste el intervalo a [inicio, fin).
  • Establecer retstep a True opcionalmente para obtener el tamaño del paso.
  • Generar matrices espaciadas uniformemente utilizando np.linspace()y, a continuación, utilizar la matriz con funciones matemáticas.

Espero que ahora entienda cómo np.linspace() funciona. Puede optar por ejecutar los ejemplos anteriores en el cuaderno Jupyter. Consulta nuestra guía sobre Cuaderno Jupyteru otros Alternativas a Jupyter puedes considerar.

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

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba el lunes
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder