Arreglos
Los arreglos son la característica principal de NumPy; son similares a las listas de Python pero tienen algunas diferencias importantes:
    Los arreglos nos permiten realizar operaciones sobre todos los elementos a la vez en una misma operación; con las listas debemos realizar las operaciones sobre cada elemento individualmente.
    Los arreglos ocupan menos espacio en memoria y son más rápidos que las listas.
    Las listas pueden tener elementos con diferentes tipos de datos, los arreglos están diseñados para que todos sus elementos sean del mismo tipo.
Nota: En este capítulo vamos a trabajar con arreglos de una sola dimensión (1-D), en el siguiente veremos arreglos multidimensionales.

Creando un arreglo de NumPy

Existen varias formas de crear un arreglo de NumPy. Una de las formas más simples es a partir de una lista o tupla utilizando el método array:
1
arr = np.array([1, 2, 3]) # arr es ahora un arreglo de NumPy
Copied!
El método arange permite crear un arreglo con un rango de números:
1
np.arange(3) # array([0, 1, 2])
2
np.arange(3, 7) # array([3, 4, 5, 6])
3
np.arange(2, 9, 2) # array([2, 4, 6, 8])
Copied!
En el último ejemplo, el tercer argumento representa el salto entre los números.
Nota: De ahora en adelante vamos a omitir la palabra array y los paréntesis en los resultados pero ten en cuenta que son arreglos de NumPy, no listas de Python.
El método linspace permite crear un arreglo de valores igualmente espaciados en un rango:
1
np.linspace(0, 10, num=5) # [0., 2.5, 5., 7.5, 10.]
Copied!
También podemos crear arreglos de unos (1) o ceros (0):
1
np.ones(3) # [1, 1, 1]
2
np.zeros(3) # [0, 0, 0]
Copied!
Y arreglos "vacíos" (información aleatoria) o con un valor determinado:
1
np.empty(3) # crea un arreglo con 3 números aleatorios
2
np.full(3, 2) # [2, 2, 2]
Copied!
Para más información te recomendamos ver la documentación de NumPy.

Conociendo el tamaño de un arreglo

Para conocer el número de elementos que tiene un arreglo utiliza el atributo size:
1
arr = np.array([4, 1, 6, 7, 3])
2
arr.size # 5
Copied!

Obteniendo valores de un arreglo

Podemos obtener un valor del arreglo utilizando la misma notación que utilizamos en las listas:
1
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
2
arr[0] # 1
3
arr[1] # 2
4
arr[10] # 9
Copied!
También es posible obtener rangos de elementos utilizando la sintaxis inicio:fin:salto. El inicio se incluye pero el fin se excluye. Veamos algunos ejemplos continuando con el ejemplo anterior:
1
arr[0:2] # [1, 2]
2
arr[2:5] # [3, 4, 5]
3
arr[0:7:2] # [1, 3, 5, 7]
Copied!
Si omitimos inicio o fin significa desde el inicio o hasta el final respectivamente:
1
arr[2:] # [3, 4, 5, 6, 7, 8, 9]
2
arr[:3] # [1, 2, 3]
Copied!
Podemos utilizar números negativos. En inicio y en fin los números negativos cuentan las posiciones desde el final del arreglo:
1
arr[-3:-1] # [7, 8]
Copied!
Un salto negativo se mueve hacia los índices menores:
1
arr[::-1] # [9, 8, 7, 6, 5, 4, 3, 2, 1]
2
arr[7:0:-2] # [8, 6, 4, 2]
Copied!
Fíjate que en el último caso el inicio debe ser mayor al fin, de lo contrario retorna un arreglo vacío.

Insertando, modificando y eliminando elementos

Los arreglos de NumPy son de tamaño fijo así que para insertar o eliminar elementos se debe crear un nuevo a arreglo.
Para insertar elementos al final del arreglo utilizamos el método append:
1
arr = np.array([1, 2, 3])
2
np.append(arr, 4) # [1, 2, 3, 4]
3
np.append(arr, [4, 5, 6]) # [1, 2, 3, 4, 5, 6]
Copied!
Recuerda que arr no se modifica cuando utilizamos append, debemos asignar el resultado a una nueva variable o reasignar la variable inicial:
1
arr = np.append(arr, 4)
2
arr # [1, 2, 3, 4]
Copied!
Para insertar elementos en otras posiciones del arreglo podemos utilizar el método insert. Por ejemplo, para insertar el número 5 en la posición 1 haríamos lo siguiente:
1
arr = np.array([1, 2, 3])
2
np.insert(arr, 1, 5) # [1, 5, 2, 3]
Copied!
Podemos modificar los elementos de un arreglo igual que lo haríamos con una lista:
1
arr = np.array([1, 2, 3, 4])
2
arr[2] = 100
3
arr # [1, 2, 100, 3]
Copied!
Para eliminar elementos de un arreglo podemos utilizar el método delete:
1
arr = np.array([1, 2, 3, 4])
2
np.delete(arr, 0) # [2, 3, 4]
3
4
# podemos utilizar un rango
5
np.delete(arr, slice(1, 3)) # [1, 4]
6
7
# podemos utilizar una lista de índices
8
np.delete(arr, [0, 2]) # [2, 4]
Copied!

Operaciones con arreglos

Una de las características principales de los arreglos de NumPy es que podemos realizar operaciones sobre todos los elementos a la vez en una sola operación, a esto se le conoce en inglés como element-wise.

Operaciones matemáticas

1
arr = np.array([1, 2, 3])
2
3
# np.add(arr, 3)
4
arr + 3 # [4, 5, 6]
5
6
# np.multiply(arr, 2)
7
arr * 2 # [1, 4, 6]
Copied!
Lo mismo podemos hacer con la resta (- o subtract), la división (/ o divide), el exponente (** o power), el módulo (% o mod) y con operaciones trigonométricas.
Las operaciones también pueden ser con otros arreglos de NumPy. Por ejemplo:
1
a = np.array([1, 2, 3, 4, 5])
2
b = np.array([6, 7, 8, 9, 10])
3
4
a + b # [ 7, 9, 11, 13, 15]
Copied!
Cuando realizas operaciones matemáticas entre arreglos, los dos arreglos deben tener la misma longitud. De lo contrario se genera un error. Por ejemplo:
1
a = np.array([1, 2, 3, 4, 5])
2
b = np.array([6, 7, 8, 9])
3
4
a * b
Copied!
Genera el siguiente error:
1
Traceback (most recent call last):
2
File "<stdin>", line 1, in <module>
3
ValueError: operands could not be broadcast together with shapes (5,) (4,)
Copied!

Operaciones de agrupación

Para sumar todos los números de un arreglo podemos utilizar el método sum y para multiplicarlos el método prod:
1
arr = np.array([1, 2, 3, 4])
2
3
# suma
4
np.sum(arr) # 10
5
6
# multiplicación
7
np.prod(arr) # 24
Copied!
También podemos obtener el mayor y el menor número de un arreglo:
1
np.max(arr) # 4
2
np.min(arr) # 1
Copied!

Operaciones lógicas

Cuando aplicamos operaciones lógicas sobre los arreglos, cada elemento es evaluado y se genera un nuevo arreglo de booleanos:
1
arr = np.array([10, 2, 2, 4, 5, 3, 9, 8, 9, 7])
2
arr > 5 # [True, False, False, False, False, False, True, True, True, True])
Copied!
También podemos utilizar las operaciones lógicas para seleccionar elementos basados en ciertos criterios:
1
arr = np.array([10, 2, 2, 4, 5, 3, 9, 8, 9, 7])
2
arr[arr > 5] # [10, 9, 8, 9, 7]
3
arr[(arr > 5) | (arr < 3)] # [10, 2, 2, 9, 8, 9, 7]
Copied!

Otras operaciones comunes

1
arr = np.array([1, 2, 3, 4])
2
3
# Longitud del arreglo, retorna un tupla con el resultado en la primera posición
4
arr.shape # (4,)
5
6
# Concatenación (retorna un nuevo arreglo)
7
np.concatenate((arr, [5, 6, 7])) # [1, 2, 3, 4, 5, 6, 7]
8
9
# Dividir en partes iguales
10
np.split(arr, 2) # [[1, 2], [3, 4]]
11
12
# Reversar (retorna un nuevo arreglo)
13
np.flip(arr) # [4, 3, 2, 1]
14
15
# Ordenar (retorna un nuevo arreglo)
16
arr = np.array([5, 2, 8, 7])
17
np.sort(arr) # [2, 5, 7, 8]
18
19
# Obtener los elementos únicos
20
arr = [1, 1, 2, 2, 3, 3]
21
np.unique(arr) # [1, 2, 3]
22
23
# Obtener el promedio
24
arr = np.array([1, 2, 3, 4])
25
np.mean(arr) # 2.5
Copied!
Estas son las operaciones más comunes. Para una lista completa consulta la documentación de NumPy.
Last modified 6mo ago