Ir al contenido principal

Tutorial de arrays de NumPy en Python

Un tutorial de NumPy para principiantes en el que aprenderás a crear arrays de NumPy, usar broadcasting, acceder a valores, manipular arrays y mucho más.
Actualizado 17 sept 2026  · 15 min leer

Explorar con IA

ChatGPTClaudePerplexity

NumPy es, al igual que SciPy, Scikit-Learn, pandas y paquetes similares, una de esas librerías de Python que no te puedes perder cuando aprendes ciencia de datos, sobre todo porque te proporciona una estructura de datos basada en arrays que ofrece ventajas frente a las listas de Python: es más compacta, permite un acceso de lectura y escritura más rápido, y resulta más cómoda y eficiente.

Este tutorial de NumPy se centrará precisamente en eso. No solo verás qué son realmente los arrays de NumPy y cómo puedes instalar Python, sino que también aprenderás a crear arrays (incluso cuando tus datos vienen de ficheros), cómo funciona el broadcasting, cómo pedir ayuda, cómo manipular tus arrays y cómo visualizarlos.

Si quieres profundizar más en los arrays de NumPy y en otras estructuras de datos que necesitarás en tu camino en ciencia de datos, échale un vistazo al Intro to Python for Data Science de DataCamp, que incluye un capítulo sobre NumPy.

¿Qué es un array de NumPy en Python?

Ya has leído en la introducción que los arrays de NumPy se parecen a las listas de Python, pero a la vez son bastante diferentes. Si acabas de llegar a este tema, aclaremos exactamente qué son y para qué sirven.

Como sugiere el nombre, un array de NumPy es una estructura de datos central de la librería numpy. El nombre de la librería es la abreviatura de “Numeric Python” o “Numerical Python”.

En otras palabras, NumPy es una librería de Python que es el núcleo de la computación científica en Python. Contiene un conjunto de herramientas y técnicas para resolver modelos matemáticos de problemas en ciencia e ingeniería.

Una de estas herramientas es un objeto de array multidimensional de alto rendimiento, una potente estructura de datos para el cálculo eficiente con arrays y matrices. Para trabajar con estos arrays, existe una gran cantidad de funciones matemáticas de alto nivel que operan sobre esas matrices y arrays.

Pero, ¿qué es un array?

Si miras la impresión de varios arrays, puedes verlo como una cuadrícula que contiene valores del mismo tipo:

import numpy as np
# Define un array 1D
my_array = np.array([[1, 2, 3, 4],
                     [5, 6, 7, 8]],
                    dtype=np.int64)
# Define un array 2D
my_2d_array = np.array([[1, 2, 3, 4],
                        [5, 6, 7, 8]],
                       dtype=np.int64)
# Define un array 3D
my_3d_array = np.array([[[1, 2, 3, 4],
                         [5, 6, 7, 8]],
                        [[1, 2, 3, 4],
                         [9, 10, 11, 12]]],
                       dtype=np.int64)
# Imprime el array 1D
print("Printing my_array:")
print(my_array)
# Imprime el array 2D
print("Printing my_2d_array:")
print(my_2d_array)
# Imprime el array 3D
print("Printing my_3d_array:")
print(my_3d_array)

Ves que, en el ejemplo anterior, los datos son enteros. El array almacena y representa datos regulares de forma estructurada.

Sin embargo, debes saber que, a nivel estructural, un array no es más que punteros. Es la combinación de una dirección de memoria, un tipo de dato, una forma (shape) y unos strides:

  • El puntero de datos indica la dirección de memoria del primer byte del array.
  • El tipo de dato o dtype describe el tipo de elementos contenidos en el array.
  • La forma indica la forma del array.
  • Los strides son el número de bytes que se deben saltar en memoria para ir al siguiente elemento. Si tus strides son (10,1), necesitas avanzar un byte para ir a la siguiente columna y 10 bytes para localizar la siguiente fila.

En otras palabras, un array contiene información sobre los datos en bruto, cómo localizar un elemento y cómo interpretarlo.

Basta de teoría. Vamos a comprobarlo:

Puedes probarlo fácilmente explorando los atributos de un array de numpy:

import numpy as np
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Dirección de memoria
print(my_2d_array.data)

# Forma de `my_array`
print(my_2d_array.shape)

# Tipo de dato de `my_array`
print(my_2d_array.dtype)

# Strides de `my_array`
print(my_2d_array.strides)

Ahora obtienes mucha más información: por ejemplo, el tipo de dato impreso es ‘int64’ o entero con signo de 64 bits; ¡Mucho más detallado! Esto también significa que el array se almacena en memoria como 64 bytes (cada entero ocupa 8 bytes y hay 8 enteros). Los strides del array nos dicen que tienes que saltarte 8 bytes (un valor) para ir a la siguiente columna, pero 32 bytes (4 valores) para llegar a la misma posición en la siguiente fila. Así, los strides del array serán (32,8).

Ten en cuenta que si defines el tipo de dato como int32, la tupla de strides que obtienes será (16, 4), ya que seguirás moviéndote un valor a la siguiente columna y 4 valores para llegar a la misma posición. Lo único que cambia es que cada entero ocupará 4 bytes en lugar de 8.

Numpy Array Axis

El array que ves arriba es, como sugiere su nombre, bidimensional: tiene filas y columnas. Las filas se indican como el “eje 0”, mientras que las columnas son el “eje 1”. El número del eje aumenta con el número de dimensiones: en arrays 3D, como el que viste en el bloque de código anterior, tendrás un “eje 2” adicional. Ten en cuenta que estos ejes solo aplican a arrays con al menos 2 dimensiones; no tiene sentido para arrays 1D.

Estos ejes te serán muy útiles más adelante cuando manipules la forma de tus arrays de NumPy.

Cómo instalar NumPy

Antes de empezar a probar por tu cuenta estos arrays de NumPy, asegúrate de tenerlo instalado en local (suponiendo que trabajas en tu ordenador). Si ya tienes la librería de Python disponible, puedes saltarte esta sección :)

Si aún necesitas configurar tu entorno, debes saber que hay dos formas principales de instalar NumPy en tu equipo: con ruedas (wheels) de Python o con la distribución Anaconda de Python.

Instalar con ruedas de Python

Primero, asegúrate de tener Python instalado. Puedes consultar nuestra guía sobre cómo instalar Python si aún no lo has hecho :)

Si trabajas en Windows, asegúrate de haber añadido Python a la variable de entorno PATH. Luego, no olvides instalar un gestor de paquetes como pip, que te permitirá usar librerías de código abierto de Python.

Las versiones recientes de Python 3 ya incluyen pip, así que comprueba si lo tienes y, si es así, actualízalo antes de instalar NumPy:

pip install pip --upgrade
pip --version
Descarga el archivo wheel de NumPy apropiado para tu sistema desde la web de PyPI. Puedes encontrar la lista de wheels disponibles en el Python Package Index.
 
Una vez descargado el wheel de NumPy, navega hasta el directorio donde lo guardaste usando el símbolo del sistema o la terminal.
 
Instala NumPy con el siguiente comando, sustituyendo "numpy-<version>-<architecture>.whl" por el nombre del archivo que descargaste:
pip install numpy-<version>-<architecture>.whl
Por ejemplo, si descargaste NumPy 1.20.3 para Windows de 64 bits, el comando sería:
pip install numpy-1.20.3-cp39-cp39-win_amd64.whl
Tras completar la instalación, puedes verificar que NumPy está instalado abriendo un intérprete de Python y ejecutando:
import numpy
Si no aparece ningún error, ¡NumPy está instalado y listo para usarse!

Instalar con la distribución Anaconda

Para obtener NumPy, también puedes descargar la distribución Anaconda de Python. Es sencillo y te permitirá empezar rápido. Si aún no la has descargado, ve a la página oficial para conseguirla. Sigue las instrucciones de instalación y ¡listo!

¿Te preguntas por qué puede ser más fácil?

La ventaja de esta distribución es que no tienes que preocuparte por instalar por separado NumPy ni otros paquetes clave para tus análisis de datos, como pandas, scikit-learn, etc.

Porque, especialmente si eres nuevo en Python, en programación o en terminales, alivia mucho saber que Anaconda ya incluye 100 de los paquetes más populares de Python, R y Scala para ciencia de datos. Y para profesionales con más experiencia, Anaconda también es ideal si quieres ponerte manos a la obra con rapidez.

Además, Anaconda incluye varios entornos de desarrollo de código abierto, como Jupyter y Spyder. Si quieres empezar a trabajar con Jupyter Notebook después de este tutorial, visita nuestro tutorial de Jupyter Notebook.

En resumen, plantéate descargar Anaconda para empezar a trabajar con numpy y otros paquetes relevantes para ciencia de datos.

Cómo crear arrays de NumPy

Ahora que ya tienes tu entorno listo, toca ponerse manos a la obra. Es verdad que arriba ya probaste algunas cosas con arrays, pero aún no has tenido práctica real porque primero necesitabas instalar NumPy en tu propio equipo. Ahora que ya lo has hecho, veamos qué necesitas para ejecutar esos bloques de código por tu cuenta.

Para crear un array de numpy, puedes usar la función np.array(). Solo tienes que pasarle una lista y, opcionalmente, puedes especificar el tipo de dato. Si quieres conocer más sobre los tipos de dato disponibles, visita esta guía o echa un vistazo a la chuleta de NumPy de DataCamp.

No es necesario memorizar estos tipos de datos de NumPy si estás empezando, pero sí debes saber y preocuparte por el tipo de datos con los que trabajas. Los tipos están ahí cuando necesitas más control sobre cómo se almacenan los datos en memoria y en disco. Especialmente si trabajas con datos extensos, conviene saber controlar el tipo de almacenamiento.

No olvides que, para usar la función np.array(), la librería numpy debe estar disponible en tu entorno.

NumPy sigue una convención de importación: cuando importes la librería, hazlo como np. Así te aseguras de que otros pythonistas entiendan tu código con mayor facilidad.

En el siguiente ejemplo, crearás el array my_array con el que ya has trasteado arriba:

import numpy as np

# Crea el array `my_array`
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Imprime `my_array`
print(my_array)

Si quieres saber más sobre cómo crear listas, consulta nuestro tutorial de listas en Python.

A veces no sabes qué datos quieres poner en tu array, o quieres importar datos a un array de numpy desde otra fuente. En esos casos, usarás marcadores iniciales o funciones para cargar datos desde texto a arrays, respectivamente.

Las siguientes secciones te muestran cómo hacerlo.

Cómo crear un array de NumPy “vacío”

Cuando la gente dice que crea arrays “vacíos”, suele referirse a usar marcadores iniciales que luego rellenarán. Puedes inicializar arrays con unos o ceros, pero también crear arrays con valores espaciados uniformemente, constantes o aleatorios.

Aun así, también puedes crear un array totalmente vacío.

Por suerte, hay bastantes funciones para ello.

¡Pruébalas aquí abajo!

import numpy as np

# Array de unos
ones_array = np.ones((3, 4))
print("Ones Array:")
print(ones_array)
print()

# Array de ceros
zeros_array = np.zeros((2, 3, 4), dtype=np.int16)
print("Zeros Array:")
print(zeros_array)
print()

# Array con valores aleatorios
random_array = np.random.random((2, 2))
print("Random Array:")
print(random_array)
print()

# Array vacío
empty_array = np.empty((3, 2))
print("Empty Array:")
print(empty_array)
print()

# Array lleno con un valor
full_array = np.full((2, 2), 7)
print("Full Array:")
print(full_array)
print()

# Array con valores espaciados uniformemente
arange_array = np.arange(10, 25, 5)
print("Arange Array:")
print(arange_array)
print()

# Array con valores espaciados uniformemente
np.linspace(0,2,9)

Consejo: juega con las funciones anteriores para entender cómo funcionan.

  • En algunas, como np.ones(), np.random.random(), np.empty(), np.full() o np.zeros(), solo necesitas pasar la forma del array que quieres crear. Como opción en np.ones() y np.zeros(), también puedes especificar el tipo de dato. En el caso de np.full(), además debes indicar el valor constante que quieres insertar en el array.
  • Con np.linspace() y np.arange() puedes crear arrays de valores espaciados uniformemente. La diferencia entre ambas es que el último valor de los tres que se pasan en el bloque de arriba designa el tamaño del paso para np.linspace() o el número de muestras para np.arange(). En la primera, por ejemplo, quieres un array de 9 valores entre 0 y 2. En la segunda, indicas que quieres un array que empiece en 10 y, con pasos de 5, genere valores para el array que estás creando.

Recuerda que NumPy también te permite crear una matriz identidad con np.eye() y np.identity(). Una matriz identidad es cuadrada, con todos los elementos de la diagonal principal a uno y el resto a cero. Al multiplicar una matriz por una identidad, la matriz original queda sin cambios.

Es decir, si multiplicas una matriz por una identidad, el producto resultante será la misma matriz según las convenciones estándar de multiplicación de matrices.

Aunque este tutorial no se centra en demostrar cómo funcionan las identidades, basta decir que son útiles cuando empiezas con cálculos matriciales: simplifican ecuaciones y hacen tus cómputos más eficientes y robustos.

Cómo cargar arrays de NumPy desde texto

Crear arrays con marcadores iniciales o con datos de ejemplo es una estupenda forma de empezar con numpy. Pero cuando quieras ponerte con análisis de datos, necesitarás cargar datos desde archivos de texto.

Con lo que has visto hasta ahora no llegarás muy lejos. Usa funciones específicas para cargar datos desde tus ficheros, como loadtxt() o genfromtxt().

Imagina que tienes los siguientes ficheros de texto con datos; copia los valores comentados del código inferior, pégalos en un fichero de texto y guárdalo como “data.txt”. Luego puedes usar este código:

# Estos son tus datos en el fichero de texto
# Value1  Value2  Value3
# 0.2536  0.1008  0.3857
# 0.4839  0.4536  0.3561
# 0.1292  0.6875  0.5929
# 0.1781  0.3049  0.8928
# 0.6253  0.3486  0.8791

# Importa tus datos
x, y, z = np.loadtxt('data.txt',
                    skiprows=1,
                    unpack=True)

En el código anterior, usas loadtxt() para cargar los datos en tu entorno. Observa que el primer argumento que toman ambas funciones es el fichero de texto data.txt. Después hay argumentos específicos: en la primera sentencia omites la primera fila y devuelves las columnas como arrays separados con unpack=TRUE. Eso significa que los valores de la columna Value1 irán a x, y así sucesivamente.

Ten en cuenta que, si tienes datos separados por comas o si quieres especificar el tipo de dato, también existen los argumentos delimiter y dtype que puedes añadir a loadtxt().

Fácil y directo, ¿verdad?

Veamos tu segundo fichero con datos:

# Tus datos en el fichero de texto
# Value1  Value2  Value3
# 0.4839  0.4536  0.3561
# 0.1292  0.6875  MISSING
# 0.1781  0.3049  0.8928
# MISSING 0.5801  0.2038
# 0.5993  0.4357  0.7410

my_array2 = np.genfromtxt('data2.txt',
                      skip_header=1,
                      filling_values=-999)

Aquí recurres a genfromtxt() para cargar los datos. En este caso, tienes que gestionar valores ausentes indicados con cadenas 'MISSING'.

Como la función genfromtxt() convierte cadenas en columnas numéricas a nan, puedes convertir estos valores a otros especificando el argumento filling_values. En este caso, decides establecer los valores ausentes a -999.

Si por alguna razón tienes valores que genfromtxt() no convierte a nan, siempre puedes usar el argumento missing_values para indicar exactamente cuáles son los valores ausentes en tus datos.

Pero no acaba aquí.

Consejo: consulta esta página de numpy.genfromtxt para ver otros argumentos con los que importar tus datos correctamente.

Ahora quizá te preguntes cuál es la diferencia entre ambas funciones.

Los ejemplos lo sugerían implícitamente, pero, en general, genfromtxt() te da un poco más de flexibilidad; es más robusta que loadtxt().

Hagamos la diferencia más práctica: la segunda, loadtxt(), solo funciona cuando cada fila del fichero de texto tiene el mismo número de valores, así que si quieres gestionar fácilmente valores ausentes, te resultará más sencillo usar genfromtxt().

Y no es la única razón.

Un vistazo rápido al número de argumentos que ofrece genfromtxt() te mostrará que puedes especificar muchas más cosas en tu importación, como el número máximo de filas a leer o la opción de eliminar automáticamente espacios en blanco.

Cómo guardar arrays de NumPy

Una vez que hayas hecho todo lo que necesitas con tus arrays, también puedes guardarlos a un fichero. Si quieres guardar el array en un archivo de texto, puedes usar la función savetxt():

import numpy as np
x = np.arange(0.0,5.0,1.0)
np.savetxt('test.out', x, delimiter=',')

Recuerda que np.arange() crea un array de NumPy con valores espaciados uniformemente. El tercer valor que pasas a esta función es el tamaño del paso.

Por supuesto, hay otras formas de guardar tus arrays de NumPy en archivos de texto. Consulta las funciones de la tabla siguiente si quieres llevar tus datos a ficheros binarios o archivos comprimidos:

save() Guarda un array en un archivo binario en formato .npy de NumPy
savez() Guarda varios arrays en un archivo .npz sin comprimir
savez_compressed() Guarda varios arrays en un archivo .npz comprimido

Para más información o ejemplos de cómo usar estas funciones para guardar tus datos, revisa esta página de referencia de NumPy o usa cualquiera de las funciones de ayuda que ofrece NumPy para conocer más al instante.

¿No tienes claro cuáles son estas funciones de ayuda de NumPy?

¡Sin problema! Aprenderás más sobre ellas en una de las siguientes secciones.

Cómo inspeccionar tus arrays de NumPy

Además de los atributos mencionados arriba (data, shape, dtype y strides), hay otros que puedes usar para conocer fácilmente más sobre tus arrays. Los que pueden resultarte útiles al empezar son:

import numpy as np

# Crea un array con shape (2,4) y dtype int64
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Número de dimensiones de `my_array`
print("Number of dimensions of my_array:")
print(my_array.ndim)
print()

# Número de elementos de `my_array`
print("Number of elements in my_array:")
print(my_array.size)
print()

# Información sobre el layout en memoria de `my_array`
print("Information about the memory layout of my_array:")
print(my_array.flags)
print()

# Longitud en bytes de un elemento
print("Length of one array element in bytes:")
print(my_array.itemsize)
print()

# Bytes totales consumidos por los elementos de `my_array`
print("Total consumed bytes by my_array's elements:")
print(my_array.nbytes)
print()

Estos son casi todos los atributos que puede tener un array.

No te preocupes si no ves utilidad en todos ahora mismo. Es normal, porque, como leíste en la sección anterior, solo empezarás a preocuparte por la memoria cuando trabajes con conjuntos de datos grandes.

Además de los atributos, también tienes otras formas de obtener más información e incluso retocar ligeramente tu array:

import numpy as np
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Longitud de `my_array`
print(len(my_array))

# Cambia el tipo de dato de `my_array`
my_array.astype(float)

Ahora que has creado tu array, ya sea con np.array() o con alguna función de inicialización, o cargando datos con loadtxt() o genfromtxt(), es momento de fijarnos más en el segundo elemento clave que define NumPy: la computación científica.

Cómo funciona el broadcasting en NumPy

Antes de profundizar en la computación científica, conviene repasar qué es exactamente el broadcasting: es un mecanismo que permite a NumPy trabajar con arrays de distintas formas cuando realizas operaciones aritméticas.

La siguiente infografía muestra un ejemplo de broadcasting en acción: 

NumPy Broadcasting

Fuente

En un contexto práctico, a menudo tienes un array algo más grande y otro algo más pequeño. Idealmente, quieres usar el array pequeño varias veces para realizar una operación (como suma, multiplicación, etc.) sobre el grande.

Para ello, usas el mecanismo de broadcasting.

Sin embargo, hay algunas reglas para poder usarlo. Y, antes de que suspires, verás que estas “reglas” son muy sencillas e intuitivas.

  • Para que el broadcasting tenga éxito, las dimensiones de tus arrays deben ser compatibles. Dos dimensiones son compatibles cuando son iguales. Considera este ejemplo:
# Importa NumPy con el alias `np`
import numpy as np

# Inicializa un array 3x4 de unos y asígnalo a `x`
x = np.ones((3,4))

# Imprime la forma de `x`
print("Shape of x:", x.shape)

# Inicializa un array 3x4 de números aleatorios entre 0 y 1 y asígnalo a `y`
y = np.random.random((3,4))

# Imprime la forma de `y`
print("Shape of y:", y.shape)

# Suma elemento a elemento `x` y `y` e imprime el resultado
z = x + y
print("Result of x + y:\n", z)

# Imprime la forma del resultado
print("Shape of x + y:", z.shape)
  • Dos dimensiones también son compatibles cuando una de ellas es 1:
# Importa NumPy con el alias `np`
import numpy as np

# Inicializa un array 3x4 de unos y asígnalo a `x`
x = np.ones((3,4))

# Imprime la forma de `x`
print("Shape of x:", x.shape)

# Inicializa un array 3x4 de números aleatorios entre 0 y 1 y asígnalo a `y`
y = np.random.random((3,4))

# Imprime la forma de `y`
print("Shape of y:", y.shape)

# Suma elemento a elemento `x` y `y` e imprime el resultado
z = x + y
print("Result of x + y:\n", z)

# Imprime la forma del resultado
print("Shape of x + y:", z.shape)

Ten en cuenta que si las dimensiones no son compatibles, obtendrás un ValueError.

Consejo: prueba también el tamaño del array resultante tras las operaciones. Verás que el tamaño es el máximo a lo largo de cada dimensión de los arrays de entrada.

En otras palabras, el resultado de x−y da un array con forma (3,4): y tenía forma (4,) y x tenía forma (3,4). Se toma el máximo a lo largo de cada dimensión de x e y para formar la forma del nuevo array resultante.

  • Por último, los arrays solo se pueden difundir juntos si son compatibles en todas las dimensiones. Considera este ejemplo:
# Importa `numpy` como `np`
import numpy as np

# Inicializa `x` e `y`
x = np.ones((3,4))
y = np.random.random((5,1,4))

# Suma `x` e `y`
z = x + y

Aunque x e y parecen tener dimensiones diferentes, se pueden sumar.

Eso es porque son compatibles en todas las dimensiones:

  • El array x tiene dimensiones 3 × 4,
  • El array y tiene dimensiones 5 × 1 × 4

Como viste antes, las dimensiones también son compatibles si una de ellas es 1, así que estos dos arrays son un buen candidato para broadcasting.

Notarás que en la dimensión donde y tiene tamaño 1 y el otro array tiene tamaño mayor que 1 (esto es, 3), el primer array se comporta como si se copiara a lo largo de esa dimensión.

La forma del array resultante será de nuevo el máximo a lo largo de cada dimensión de x e y: la dimensión del resultado será (5,3,4)

En resumen, si quieres usar broadcasting, dependerás mucho de la forma y dimensiones de los arrays con los que trabajas.

Pero ¿y si las dimensiones no son compatibles?

¿Y si no son iguales ni una de ellas es 1?

Tendrás que solucionarlo manipulando tu array. Verás cómo hacerlo en una de las siguientes secciones.

¿Cómo funcionan las matemáticas con arrays?

Has visto que el broadcasting es útil cuando haces operaciones aritméticas. En esta sección, descubrirás algunas funciones para hacer matemáticas con arrays.

Probablemente no te sorprenda que puedas usar +, -, *, / o % para sumar, restar, multiplicar, dividir o calcular el resto de dos (o más) arrays. Sin embargo, parte del poder de NumPy es que también tiene funciones para ello. Las funciones equivalentes son, respectivamente, np.add(), np.subtract(), np.multiply(), np.divide() y np.remainder().

También puedes elevar a potencias y calcular raíces cuadradas con np.exp() y np.sqrt(), o calcular senos y cosenos con np.sin() y np.cos(). Por último, también es útil mencionar que puedes calcular el logaritmo natural con np.log() o el producto punto con dot() aplicado a tu array.

Pruébalo en el siguiente código.

Un consejo: revisa primero los arrays cargados para este ejercicio.

# Importa `numpy` como `np`
import numpy as np
x = np.array([[1, 2, 3], [3, 4, 5]])
y = np.array([6,7,8])

# Suma `x` e `y`
z = np.add(x,y)
print("Addition of x and y:\n", z)

# Resta `x` e `y`
z = np.subtract(x,y)
print("Subtraction of y from x:\n", z)

# Multiplica `x` e `y`
z = np.multiply(x,y)
print("Element-wise multiplication of x and y:\n", z)

¿Recuerdas cómo funciona el broadcasting? Comprueba las dimensiones y formas de x e y en tu shell de IPython. ¿Se respetan las reglas de broadcasting?

Pero hay más.

Mira esta lista de funciones agregadas:

a.sum() Suma del array
a.min() Mínimo del array
b.max(axis=0) Máximo por fila del array
b.cumsum(axis=1) Suma acumulada de los elementos
a.mean() Media
b.median() Mediana
a.corrcoef() Coeficiente de correlación
np.std(b) Desviación estándar

Además de todas estas funciones, también puede resultarte útil saber que existen mecanismos para comparar elementos de arrays. Por ejemplo, si quieres comprobar si los elementos de dos arrays son iguales, puedes usar el operador ==. Para comprobar si son menores o mayores, usa los operadores < o >.

Todo bastante directo, ¿sí?

Sin embargo, también puedes comparar arrays completos entre sí. En ese caso, usa la función np.array_equal(). Pasa los dos arrays que quieras comparar y listo.

Además de comparar, también puedes realizar operaciones lógicas con tus arrays. Puedes empezar con np.logical_or(), np.logical_not() y np.logical_and(). Funcionan como los operadores lógicos OR, NOT y AND de toda la vida.

En el ejemplo más simple, usas OR para ver si tus elementos son iguales (por ejemplo, 1) o si al menos uno de los dos elementos del array es 1. Si ambos son 0, devolverás FALSE. Usarías AND para ver si el segundo elemento también es 1, y NOT para ver si el segundo elemento difiere de 1.

Pruébalo en este bloque:

# Importa `numpy` como `np`
import numpy as np
# Inicializa arrays
a = np.array([1, 1, 0, 0], dtype=bool)
b = np.array([1, 0, 1, 0], dtype=bool)

# `a` AND `b` 
np.logical_and(a, b)

# `a` OR `b`
np.logical_or(a, b)

# `a` NOT `b`
np.logical_not(a,b)

Cómo sub‑seleccionar, hacer slicing e indexar arrays

Además de las operaciones matemáticas, puede que quieras tomar solo una parte del array original (o del resultante) o algunos elementos concretos para usarlos en análisis posteriores u otras operaciones. En ese caso, necesitarás sub‑seleccionar, hacer slicing y/o indexar tus arrays.

Estas operaciones son muy similares a cuando las aplicas a listas de Python. Si quieres comprobar las similitudes por tu cuenta o quieres una explicación más detallada, echa un vistazo al tutorial de listas en Python de DataCamp.

Si no tienes claro cómo funcionan, por ahora basta con dos ideas básicas:

  • Usas corchetes [] como operador de indexación, y
  • Generalmente pasas enteros dentro de esos corchetes, pero también puedes poner dos puntos : o una combinación de dos puntos con enteros para indicar los elementos/filas/columnas que quieres seleccionar.

Subselección

Más allá de estos dos puntos, lo más sencillo es verlo con ejemplos de subselección:

import numpy as np

# Inicializa un array 1D
my_array = np.array([1,2,3,4])

# Imprime subselecciones
print(my_array[1])
import numpy as np

# Inicializa un array 2D
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Imprime subselecciones
print(my_2d_array[1][2])
print(my_2d_array[1,2])
import numpy as np

# Inicializa un array 3D
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Imprime una subselección
print(my_3d_array[1,1,2])

Slicing

El slicing es algo un poco más avanzado que la subselección. Aquí, en lugar de seleccionar valores concretos, vas al nivel de filas y columnas. Básicamente trabajas con “regiones” de datos en lugar de meras “ubicaciones”.

Entenderás la idea con estos ejemplos:

import numpy as np

# Inicializa un array 1D
my_array = np.array([1,2,3,4])

# Imprime subselecciones
print(my_array[0:2])
import numpy as np

# Inicializa un array 2D
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Imprime subselecciones
print(my_2d_array[0:2,1])
import numpy as np

# Inicializa un array 3D
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Imprime una subselección
print(my_3d_array[1,...])

En esencia, se cumple lo siguiente:

a[start:end] # elementos desde start hasta end (sin incluir end)
a[start:]    # elementos desde start hasta el final del array
a[:end]      # elementos desde el inicio hasta end (sin incluir end)

En el código anterior, cada array se inicializa por separado y las subselecciones se imprimen en bloques también separados. my_array, my_2d_array y my_3d_array son los arrays 1D, 2D y 3D, respectivamente, y se imprimen las subselecciones usando la notación de indexación.

En el primer ejemplo usamos slicing para seleccionar los elementos en los índices 0 y 1 de my_array. En el segundo ejemplo, usamos slicing para seleccionar los elementos de las filas 0 y 1, columna 1 de my_2d_array. En el tercero, usamos la notación ... para seleccionar todos los elementos a lo largo de la primera y segunda dimensión, y el segundo elemento a lo largo de la tercera dimensión de my_3d_array.

Indexación

Por último, tenemos la indexación. En NumPy, hablamos de indexación booleana e indexación avanzada o “fancy”.

(Por si te lo preguntas, esto es jerga real de NumPy).

Primero, la indexación booleana. En lugar de seleccionar elementos, filas o columnas por número de índice, seleccionas aquellos valores del array que cumplen una condición.

Llevarlo a código es bastante fácil:

import numpy as np
my_array = np.array([1,2,3,4])
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Prueba un ejemplo simple
print(my_array[my_array<2])

# Especifica una condición
bigger_than_3 = (my_3d_array >= 3)

# Usa la condición para indexar el array 3D
print(my_3d_array[bigger_than_3])

Para especificar una condición, también puedes usar los operadores lógicos | (OR) y & (AND). Si quisieras reescribir la condición anterior de ese modo (ineficiente, pero ilustrativo :)), quedaría bigger_than_3 = (my_3d_array > 3) | (my_3d_array == 3).

Con los arrays cargados aquí no hay muchas posibilidades, pero con arrays que contengan, por ejemplo, nombres o capitales, ¡las opciones son infinitas!

En la indexación avanzada, básicamente pasas una lista o un array de enteros para especificar el orden del subconjunto de filas que quieres seleccionar del array original.

¿Te suena un poco abstracto?

No te preocupes, pruébalo con este código:

import numpy as np
my_array = np.array([1,2,3,4])
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Selecciona elementos en (1,0), (0,1), (1,2) y (0,0)
print(my_2d_array[[1, 0, 1, 0],[0, 1, 2, 0]])

# Selecciona un subconjunto de filas y columnas
print(my_2d_array[[1, 0, 1, 0]][:,[0,1,2,0]])

La segunda sentencia puede que te resulte menos intuitiva a primera vista. Es normal. Ayuda desglosarla:

    • Si ejecutas solo my_2d_array[[1,0,1,0]], el resultado es:
array([[5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4]])
    • La segunda parte, [:,[0,1,2,0]], indica que quieres mantener todas las filas de este resultado, pero reordenar un poco las columnas. Quieres mostrar las columnas 0, 1 y 2 tal cual, y repetir la columna 0 como última columna en lugar de mostrar la columna 3. Esto da:
array([[5, 6, 7, 5],
   [1, 2, 3, 1],
   [5, 6, 7, 5],
   [1, 2, 3, 1]])

¡La indexación avanzada ya no tiene secretos para ti!

Cómo pedir ayuda

A modo de intermedio, debes saber que siempre puedes pedir más información sobre los módulos, funciones o clases con los que trabajas, especialmente porque NumPy puede imponerse un poco cuando empiezas.

Pedir ayuda es bastante sencillo.

Solo tienes que usar funciones específicas de ayuda que ofrece numpy para ponerte en marcha:

  • Usa lookfor() para buscar por palabra clave en los docstrings. Es especialmente útil si estás empezando, ya que la “teoría” puede desvanecerse en tu memoria. El único contra es que tendrás que revisar todos los resultados si tu consulta no es precisa, como en el ejemplo de abajo.
  • Usa info() para explicaciones rápidas y ejemplos de código de funciones, clases o módulos. Si aprendes haciendo, este es tu camino. La única pega es que necesitas saber en qué módulo están ciertos atributos o funciones. Si no te queda claro qué significa esto, mira el ejemplo.

Ambas funciones tienen ventajas y desventajas, pero verás por ti mismo por qué las dos pueden ser útiles: pruébalas en el bloque de abajo.

import numpy as np

# Busca información sobre `mean` con `np.lookfor()` 
print(np.lookfor("mean"))
# Obtén información sobre tipos de datos con `np.info()`
np.info(np.ndarray.dtype)

Observa que necesitas saber que dtype es un atributo de ndarray. Además, no olvides anteponer np a los módulos, clases o términos sobre los que pidas información; de lo contrario, obtendrás un error como este:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ndarray' is not defined

Ahora ya sabes cómo pedir ayuda, y eso es una gran noticia. El siguiente tema de este tutorial de NumPy es la manipulación de arrays.

No es que no puedas con este tema por tu cuenta, ¡al contrario!

Pero algunas funciones pueden generar dudas, porque, ¿cuál es la diferencia entre redimensionar (resize) y cambiar la forma (reshape)?

¿Y cuál es la diferencia entre apilar tus arrays en horizontal y en vertical?

La siguiente sección trata de responder a estas preguntas, pero si alguna vez dudas, usa las funciones de ayuda que acabas de ver para ponerte al día rápidamente.

Cómo manipular arrays

Realizar operaciones matemáticas sobre tus arrays es una de las cosas que harás, pero lo más importante para que esto y el broadcasting funcionen es saber cómo manipular tus arrays.

A continuación, verás algunas de las manipulaciones más comunes.

Cómo transponer tus arrays

Transponer un array significa permutar sus dimensiones. O, dicho de otro modo, intercambiar su forma. Veamos un ejemplo pequeño para mostrar el efecto de la transposición:

import numpy as np
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Imprime `my_2d_array`
print(my_2d_array)

# Transpone `my_2d_array`
print(np.transpose(my_2d_array))

# O usa `T` para transponer `my_2d_array`
print(my_2d_array.T)

Consejo: si la comparación visual entre el array y su transpuesta no es del todo clara, inspecciona la forma (shape) de ambos para entender por qué se permutan las dimensiones.

Hay dos formas de transponer. Ambas hacen lo mismo; no hay gran diferencia. Ten en cuenta que T es una especie de atajo y que tienes más flexibilidad con np.transpose(). Por eso se recomienda usar esta última si quieres pasar más argumentos.

Todo bien al transponer arrays de más de una dimensión, pero ¿qué pasa con un array 1D? ¿Crees que hay algún efecto?

Pruébalo tú mismo con el siguiente código. Tu array 1D ya está cargado:

import numpy as np
my_array = np.array([1,2,3,4])

# Imprime `my_2d_array
print(my_array)

# Transpone `my_2d_array
print(np.transpose(my_array))

# O usa `T` para transponer `my_2d_array
print(my_array.T)

¡Exacto! No hay efecto al transponer un array 1D.

Cambiar forma (reshape) vs redimensionar (resize)

En la sección de broadcasting viste que las dimensiones de tus arrays deben ser compatibles si quieres usarlos en operaciones aritméticas. Pero aún no respondimos a qué hacer cuando no es así.

¡Aquí va la respuesta!

Si los arrays no tienen las mismas dimensiones, puedes redimensionar tu array. Devolverás un nuevo array con la forma que hayas pasado a la función np.resize(). Si pasas tu array original junto con las nuevas dimensiones y ese nuevo array es mayor que el original, se rellenará con copias del array original repetidas las veces necesarias.

Sin embargo, si simplemente aplicas np.resize() al array y pasas su nueva forma, el nuevo array se rellenará con ceros.

Probémoslo con un ejemplo:

import numpy as np
x = np.ones((3,4))

# Imprime la forma de `x`
print(x.shape)

# Redimensiona `x` a ((6,4))
np.resize(x, (6,4))

# Prueba también esto
x.resize((6,4))

# Imprime `x`
print(x)

Además de redimensionar, puedes cambiar la forma (reshape) de tu array. Esto significa dar una nueva forma a un array sin cambiar sus datos. La clave es asegurarte de que el tamaño total del nuevo array no cambie. Si tomas el ejemplo del array x anterior, que tiene tamaño 3 × 4, es decir, 12, debes asegurarte de que el nuevo array también tenga tamaño 12.

Psst… Si quieres calcular el tamaño de un array en código, usa el atributo size: x.size o x.reshape((2,6)).size:

import numpy as np

# Inicializa un array con shape (3,4) lleno de unos
x = np.ones((3,4))

# Imprime la forma de `x`
print("Shape of x:", x.shape)

# Redimensiona `x` a ((6,4))
np.resize(x, (6,4))

# Prueba también esto
x.resize((6,4))

# Imprime `x` antes y después de redimensionar
print("Array before transposing:\n", x)
print("Shape of array before transposing:", x.shape)

# Transpone `x`
x = x.T

# Imprime `x` tras transponer
print("Array after transposing:\n", x)
print("Shape of array after transposing:", x.shape)

Salida: 

Shape of x: (3, 4)
Array before transposing:
 [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
Shape of array before transposing: (6, 4)
Array after transposing:
 [[1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]]
Shape of array after transposing: (4, 6)

Si nada de esto encaja, también puedes añadir (append) un array al original o insertar o eliminar elementos para asegurarte de que tus dimensiones encajen con las del otro array que usarás en tus cálculos.

Otra operación útil cuando cambias la forma de arrays es ravel(). Esta función aplana tus arrays. Es decir, si tienes arrays 2D, 3D o nD, puedes usarla para dejarlos en un array 1D.

Práctico, ¿verdad?

Cómo hacer append de arrays

Cuando haces append de arrays al array original, se “pegan” al final. Si quieres que lo que añades no vaya al final, quizá te convenga insertarlo. Ve a la siguiente sección para saber más.

Hacer append es muy fácil con NumPy; solo tienes que usar np.append().

Compruébalo en este bloque. Recuerda que siempre puedes ver qué arrays hay cargados escribiendo, por ejemplo, my_array en la shell de IPython y pulsando ENTER.

import numpy as np

my_array = np.array([1,2,3,4])

# Imprime `my_array` antes de hacer append
print("my_array before appending:", my_array)

# Haz append de un array 1D a `my_array`
new_array = np.append(my_array, [7, 8, 9, 10])

# Imprime `new_array`
print("new_array:", new_array)

# Imprime `my_array` después de hacer append
print("my_array after appending:", my_array)

Salida:

my_array before appending: [1 2 3 4]
new_array: [ 1  2  3  4  7  8  9 10]
my_array after appending: [1 2 3 4]

Observa que my_array permanece sin cambios tras el append porque np.append() devuelve un array nuevo en lugar de modificar el original in situ.

Append a my_2d_array:

import numpy as np

my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Imprime `my_2d_array` antes del append
print("my_2d_array before appending:\n", my_2d_array)

# Añade una columna extra a `my_2d_array`
new_2d_array = np.append(my_2d_array, [[7], [8]], axis=1)

# Imprime `new_2d_array`
print("new_2d_array:\n", new_2d_array)

# Imprime `my_2d_array` después del append
print("my_2d_array after appending:\n", my_2d_array)

Salida: 

my_2d_array before appending:
 [[1 2 3 4]
  [5 6 7 8]]
new_2d_array:
 [[1 2 3 4 7]
  [5 6 7 8 8]]
my_2d_array after appending:
 [[1 2 3 4]
  [5 6 7 8]]


Fíjate en que, al añadir una columna extra a my_2d_array, se especifica el eje. Recuerda que el eje 1 indica las columnas, mientras que el eje 0 indica las filas en arrays 2D.

Cómo insertar y eliminar elementos de un array

Además de hacer append, también puedes insertar y eliminar elementos. Como habrás imaginado, las funciones que te permiten hacerlo son np.insert() y np.delete():

import numpy as np
my_array = np.array([1,2,3,4])
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Inserta `5` en el índice 1
np.insert(my_array, 1, 5)

# Elimina el valor del índice 1
np.delete(my_array,[1])

Cómo unir y dividir arrays

También puedes “fusionar” o unir arrays. Hay varias funciones para ello y la mayoría están listadas abajo.

Pruébalas, pero asegúrate también de comprobar la forma de los arrays en la shell de IPython. Los arrays cargados son x, my_array, my_resized_array y my_2d_array.

import numpy as np 
x = np.ones((4,))
my_array = np.array([1,2,3,4])
my_resized_array=np.resize(my_array,(2,4))
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)

# Concatenar `my_array` y `x`
print(np.concatenate((my_array,x)))

# Apilar por filas
print(np.vstack((my_array, my_2d_array)))

# Apilar por filas
print(np.r_[my_resized_array, my_2d_array])

# Apilar horizontalmente
print(np.hstack((my_resized_array, my_2d_array)))

# Apilar por columnas
print(np.column_stack((my_resized_array, my_2d_array)))

# Apilar por columnas
print(np.c_[my_resized_array, my_2d_array])

Verás varias cosas al usar estas funciones:

  • El número de dimensiones debe ser el mismo si quieres concatenar dos arrays con np.concatenate(). Así que, si quieres concatenar un array con my_array, que es 1D, el segundo array también debe ser 1D.
  • Con np.vstack(), combinas sin esfuerzo my_array con my_2d_array. Solo debes asegurarte de que, al apilar por filas, el número de columnas de ambos arrays sea el mismo. Del mismo modo, podrías añadir un array con forma (2,4) o (3,4) a my_2d_array, siempre que coincidan las columnas. Dicho de otra forma, los arrays deben tener la misma forma en todos los ejes salvo el primero. Lo mismo aplica a np.r[].
  • Para np.hstack(), debes asegurarte de que el número de dimensiones sea el mismo y que el número de filas de ambos arrays coincida. Eso significa que podrías apilar arrays como (2,3) o (2,4) sobre my_2d_array, que tiene forma (2,4). Todo es posible mientras coincida el número de filas. Esta función sigue estando soportada por NumPy, pero se recomienda preferir np.concatenate() o np.stack().
  • Con np.column_stack(), debes asegurarte de que los arrays de entrada tengan la misma primera dimensión. En este caso, ambas formas son iguales, pero si my_resized_array fuera (2,1) o (2,), los arrays seguirían apilándose.
  • np.c_[] es otra forma de concatenar. Aquí también, la primera dimensión de ambos arrays debe coincidir.

Cuando hayas unido arrays, quizá quieras dividirlos en algún punto. Igual que puedes apilarlos horizontalmente, también puedes hacerlo verticalmente. Usa np.hsplit() y np.vsplit(), respectivamente:

import numpy as np
my_array = np.array([1,2,3,4])
my_resized_array=np.resize(my_array,(2,4))
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
my_stacked_array = np.hstack((my_resized_array, my_2d_array))

# Divide `my_stacked_array` horizontalmente en el índice 2
print(np.hsplit(my_stacked_array, 2))

# Divide `my_stacked_array` verticalmente en el índice 2
print(np.vsplit(my_stacked_array, 2))

Cuando uses estas funciones de división, ten muy presente la forma de tu array. En el caso anterior: my_stacked_array tiene forma (2,8). Si quieres seleccionar el índice en el que se producirá la división, debes tener en cuenta esa forma.

Cómo visualizar arrays de NumPy

Por último, algo que te vendrá genial: saber cómo representar tus arrays. Es especialmente útil en exploración de datos, pero también en fases posteriores del flujo de trabajo cuando quieras visualizar tus arrays.

Con np.histogram()

Al contrario de lo que podría sugerir el nombre, la función np.histogram() no dibuja el histograma, sino que calcula las ocurrencias de los elementos del array que caen en cada bin; esto determina el área que ocupará cada barra del histograma.

Lo que pasas a np.histogram() es, primero, los datos de entrada o el array con el que trabajas. El array se aplanará durante el cálculo del histograma.

# Importa `numpy` como `np`
import numpy as np

# Inicializa tu array
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)

# Pasa el array a `np.histogram()`
print(np.histogram(my_3d_array))

# Especifica el número de bins
print(np.histogram(my_3d_array, bins=range(0,13)))

Como resultado, se calculará el histograma: el primer array lista las frecuencias de todos los elementos, mientras que el segundo lista los bins que se usarían si no especificas ninguno.

Si especificas un número de bins, el resultado será diferente: desaparecerán los floats y verás enteros para los bins.

Aún hay otros argumentos que puedes especificar y que influyen en el histograma calculado. Puedes consultarlos todos aquí.

Pero ¿de qué sirve calcular el histograma si no puedes visualizarlo?

La visualización es muy sencilla con Matplotlib, y no necesitas np.histogram(): plt.hist() lo calcula por sí mismo cuando le pasas los datos (aplanados) y los bins:

# Importa numpy y matplotlib
import numpy as np
import matplotlib.pyplot as plt

# Construye el histograma con el array 3D aplanado y un rango de bins
plt.hist(my_3d_array.ravel(), bins=range(0,13))

# Añade un título
plt.title('Frequency of My 3D Array Elements')

# Muestra el gráfico
plt.show()

El código anterior te dará este histograma (básico):

Numpy Array Histogram

Usando np.meshgrid()

Otra forma de visualizar (indirectamente) tu array es con np.meshgrid(). El problema con los arrays es que necesitas arrays 2D de valores de coordenadas x e y. Con esta función, puedes crear una cuadrícula rectangular a partir de un array de valores x y otro de valores y: np.meshgrid() toma dos arrays 1D y produce dos matrices 2D correspondientes a todos los pares (x, y) de ambos arrays. Después, puedes usar estas matrices para crear todo tipo de gráficos.

np.meshgrid() es especialmente útil si quieres evaluar funciones en una cuadrícula, como muestra el siguiente código:

# Importa NumPy y Matplotlib
import numpy as np
import matplotlib.pyplot as plt

# Crea un array
points = np.arange(-5, 5, 0.01)

# Crea la malla
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs ** 2 + ys ** 2)

# Muestra la imagen en los ejes
plt.imshow(z, cmap=plt.cm.gray)

# Dibuja una barra de color
plt.colorbar()

# Muestra el gráfico
plt.show()

El código anterior produce el siguiente resultado:

Numpy Meshgrid

Más allá del análisis de datos con NumPy

¡Enhorabuena, has llegado al final del tutorial de NumPy!

Has cubierto mucho terreno, así que ahora asegúrate de retener lo aprendido. No olvides hacerte con la chuleta de NumPy de DataCamp para ayudarte con ello.

Después de tanta teoría, también toca practicar más los conceptos y técnicas que has visto en este tutorial. Una forma es volver al tutorial de scikit-learn y seguir experimentando con los arrays de datos que se usan para construir modelos de machine learning.

Si esto no es lo tuyo, comprueba de nuevo si has descargado Anaconda. Luego, empieza con arrays de NumPy en Jupyter con esta guía definitiva de Jupyter Notebook. Asegúrate también de revisar este Jupyter Notebook, que también te guía por el análisis de datos en Python con NumPy y otras librerías en el entorno interactivo de Jupyter.

Por último, considera los cursos de DataCamp sobre manipulación y visualización de datos. En especial, nuestros últimos cursos en colaboración con Continuum Analytics te interesarán seguro. Échale un vistazo a Manipulating DataFrames with Pandas o a Pandas Foundations.

Temas
Python
Ciencia de datos
Análisis de datos

Descubre más sobre Python

Curso

Introducción a NumPy

4 h
61.9K
Desarrolla tus habilidades y domina NumPy y aprende a crear, ordenar, filtrar y actualizar matrices mediante el censo de árboles de NYC.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado

blog

Las 20 mejores preguntas de entrevista sobre NumPy: de básico a avanzado

Prepárate para tu próxima entrevista de ciencia de datos con preguntas esenciales de NumPy, de básico a avanzado. Perfectas para afianzar tus habilidades y ganar confianza.
Tim Lu's photo

Tim Lu

9 min

Tutorial

Arreglos en Python

Arreglos de Python con ejemplos de código. ¡Aprende hoy mismo a crear e imprimir arreglos con Python NumPy!
DataCamp Team's photo

DataCamp Team

3 min

Tutorial

Funciones en Python: cómo llamar y escribir funciones

Descubre cómo escribir funciones en Python reutilizables y eficientes. Domina los parámetros, las sentencias return y temas avanzados como las funciones lambda. Organiza mejor tu código con main() y otras buenas prácticas.
Karlijn Willems's photo

Karlijn Willems

14 min

Tutorial

Tutorial de Estructuras de Datos en Python

Introdúcete en las estructuras de datos de Python: aprende más sobre tipos de datos y estructuras de datos primitivas y no primitivas, como cadenas, listas, pilas, etc.
Sejal Jaiswal's photo

Sejal Jaiswal

24 min

Tutorial

Tutorial sobre bucle for en Python

Aprende a implementar bucle «for» en Python para iterar una secuencia o las filas y columnas de un DataFrame.
Aditya Sharma's photo

Aditya Sharma

5 min

Tutorial

Tutorial de visualización de datos con Python y Tableau

Aprende a utilizar Python para ampliar las funciones de visualización de datos de Tableau.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Ver MásVer Más