La libreria numpy es un paquete de Python para el procesamiento numérico

Introducción a la libreria numpy

Es esta entrada vamos a hablar de la libreria numpy:

NumPy es una librería de Python especializada en el procesamiento numérico y científico de datos. Proporciona estructuras de datos como los arrays multidimensionales (ndarrays) y una amplia colección de funciones matemáticas optimizadas, que permiten realizar operaciones vectorizadas, álgebra lineal, estadísticas y transformaciones de datos de forma rápida y eficiente.

Gracias a su rendimiento y versatilidad, NumPy es la base de muchas otras bibliotecas del ecosistema científico y de machine learning en Python, como Pandas, TensorFlow o Scikit-learn.

Características de la libreria numpy

Entre las principales características que ofrece la libreria numpy en Python se encuentran:

  • Cuenta con una estructura de arrays que permite realizar operaciones vectorizadas de forma eficiente sobre datos numéricos.

  • Dispone de un extenso conjunto de funciones matemáticas y estadísticas, que al aplicarse sobre arrays, facilitan operaciones como sumas, productos, promedios, desviaciones estándar, entre otras.

  • Permite realizar operaciones de álgebra lineal, como suma y multiplicación de matrices, resolución de sistemas de ecuaciones lineales y el cálculo de autovalores y autovectores.

  • Se integra fácilmente con otras bibliotecas de Python utilizadas en ciencia de datos y machine learning, como pandas, scikit-learn y TensorFlow.

  • Está escrita en lenguaje C, lo que permite ejecutar operaciones de forma muy eficiente, siendo esencial en aplicaciones científicas, matemáticas y de ingeniería.

Como crear arrays en la libreria de numpy

Existen dos formas de crear un array [fila , columna]:

  • Vector: a = np.array([1, 2])
  • Matriz: a = np.array([(1, 2),(3,4)])

Para devolver las dimensiones:

import numpy as np 
a = np.array([1, 2]) # Creaccion de un vector
b= np.array([(1, 2),(3,4)]) #Creaccion de una matriz
#Devolucion de las dimensiones
print(a.shape) 
print(b.shape)
(2,)
(2, 2)

Otras preguntas

Desde la biblioteca Numpy, se pueden realizar una serie de operaciones esenciales con vectores, como:

1.Creación de vectores

import numpy as np
a = np.array([1, 2])
print(a)
[ 1  2 ]

Para saber la clase a la que pertenece un vector:

import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(«El valor de la clase es:», type(a))

El valor de la clase es: <class ‘numpy.ndarray’>

2.Agregar nuevos elementos a un vector existente

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x=np.append(arr, 10)
print(x)
[ 1  2  3  4  5 10]

3.Eliminar elementos no deseados de un vector

Se eliminando usando la opción  np.delete(a,indice)

import numpy as np
a = np.array([1,3,4,5,6])
print(a)
s=np.delete(a, 1)
print(s)
[1 3 4 5 6][1 4 5 6]

4.Encontrar elementos únicos en un vector

import numpy as np
s=np.unique([1, 1, 2, 8, 2, 3, 3])
print(s)
[1 2 3 8]

5.Restricción de valores en un vector

Todos los valores a la izquierda de i [:i]

import numpy as np
a = np.array([11, 12, 43, 54, 35])
print(a[:2])
[11 12]

Todos los valores a la derecha de i incluido i [i:]

import numpy as np
a = np.array([11, 12, 43, 54, 35])
print(a[2:])
[43 54 35]

Todos los valores

import numpy as np
a = np.array([11, 12, 43, 54, 35])
print(a[:])
[11, 12, 43, 54, 35]

6.Limitar los valores de un arreglo a un rango específico

Se va a imprimir el array resultante aplicando la función  np.clip. En este caso, los valores en el array original que son menores que 3 se establecen en 3, y los valores que son mayores que 8 se establecen en 8.

import numpy as np
z = np.array([1,2,3,4,5,6,8,9])
print(np.clip(z, 3, 8))
[3 3 3 4 5 6 8 8]

7.Determinar cuántas veces aparece cada elemento en un vector

Nos devuelve un array con las ocurrencias de cada elemento

import numpy as np
arr = np.array([1,1,2,3,4,4])
a = np.bincount(arr)
print(a)
[0 2 1 1 2]

Esto significa que:

  • 0 no aparece en arr.
  • 1 aparece dos veces en arr.
  • 2 aparece una vez en arr.
  • 3 aparece una vez en arr.
  • 4 aparece dos veces en arr.

8.Calcular máximos, mínimos y sumas de elementos de un vector

import numpy as np
a = np.array([(1, 2, 3, 4, 5, 6)])
print("El valor minimo es: ",a.min())
print("El valor maximo es: ",a.max())
print("La suma de los valores del vector es: ",a.sum())

El valor minimo es: 1
El valor maximo es: 6
La suma de los valores del vector es: 21

9.Calcular la raíz cuadrada de los elementos de un vector

import numpy as np
a = np.array([(1, 2, 3, 4, 5, 6)])
print("La raiz cuadrada del vector es: ", np.sqrt(a))

La raiz cuadrada del vector es: [[1. 1.41421356 1.73205081 2. 2.23606798 2.44948974]]

10.Calcular la desviación estándar de un vector

import numpy as np
a = np.array([(1, 2, 3, 4, 5, 6)])
print("La desviacion estandar de los elementos del vector es: ",np.std(a))

La desviacion estandar de los elementos del vector es: 1.707825127659933

11.Encontrar las posiciones en las que se cumple una condición específica en un vector

import numpy as np
import numpy as np
a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
s = np.where(a < 3)
print(s)

(array([0, 1, 2], dtype=int64),)

Esto indica que los elementos en las posiciones [0, 1, 2] del vector a son menores que 3. Los índices se devuelven en un arreglo NumPy y están dentro de un conjunto de paréntesis.

import numpy as np
import numpy as np
a = np.array([0, 11, 22, 32, 41, 15, 61, 17, 3, 19])
s = np.where(a < 5, 1, 0) 
print(s)
[1 0 0 0 0 0 0 0 1 0]

Muestra que los elementos en las posiciones donde la condición a < 5 es verdadera se establecen como 1 en el nuevo vector s, mientras que los elementos que no cumplen la condición se establecen como 0.

12.Concatenación de vectores

Vertical
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.vstack((a,b))
print(c)
[[1 2 3] [4 5 6]]

Horizontal
import numpy as np
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.hstack((a,b))
print(c)
[1 2 3 4 5 6]

Desde la biblioteca Numpy, se pueden realizar una serie de operaciones esenciales, como:

1.Crear una matriz

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

[[1 2] [3 4]]

2.Crear una matriz con ceros y unos

import numpy as np 
unos = np.ones((2,2))
ceros = np.zeros((2,2))
print("La matriz de ceros es:", ceros)
print("La matriz de unos es:", unos)

La matriz de ceros es: [[0. 0.] [0. 0.]] La matriz de unos es: [[1. 1.] [1. 1.]]

3.Crear una matriz aleatoria

import numpy as np 
aleatoria= np.random.random((2,2))
print("La matriz aleatoria es: ", aleatoria)

La matriz aleatoria es:

[[0.13377701 0.6912948 ] [0.00247537 0.46947408]]

4.Crear una matriz vacía

import numpy as np 
vacia=np.empty((2,2))
print("La matriz vacia es: ", vacia)

La matriz vacía es:

[[3.33774490e-307 4.00545549e-307] [1.61324985e-307 4.67296746e-307]]

5.Crear matriz que contenga el valor definido en todas las posiciones

import numpy as np 
full = np.full((2,2),5)
print("La matriz vacía es: ", full)

La matriz vacía es: [[5 5] [5 5]]

6.Crear una matriz identidad

import numpy as np 
identidad1 = np.identity(4)
identidad2 = np.eye(4,4)
print("La matriz identidad mediante la opción 1 es: ", identidad1)
print("La matriz identidad mediante la opción 2 es: ", identidad2)

La matriz identidad mediante la opción 1 es: [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] La matriz identidad mediante la opción 2 es: [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]]

7.Devolver las dimensiones de una matriz

import numpy as np 
a = np.array([(1, 2),(3,4)])
print("La dimensiones de la matriz son: ",a.size)

La dimensiones de la matriz son: 4

8.Devolver el tamaño de una matriz

import numpy as np 
a = np.array([(1, 2),(3,4)]) 
print("1. El numero de elementos de la matriz es: ",a.size) 
print("2. El vector de dimensiones de la matriz es: ",a.shape) 
print("3. El numero de columnas de la matriz es: ",a.shape[0]) 
print("4. El numero de filas de la matriz es: ",a.shape[1])

1. El numero de elementos de la matriz es: 4
2. El vector de dimensiones de la matriz es: (2, 2)
3. El numero de columnas de la matriz es: 2
4. El numero de filas de la matriz es: 2

9.Tipos de datos almacenados en una matriz

import numpy as np 
import numpy as np 
a = np.array([(1, 2),(3,4)])
b = np.array([(1.1, 2.1),(3.0,4.1)])
print("El tipo de datos almacenado en la matriz a es: ",a.dtype)
print("El tipo de datos almacenado en la matriz b es: ",b.dtype)

El tipo de datos almacenado en la matriz a es: int32
El tipo de datos almacenado en la matriz b es: float64

10.Cambio de dimensiones de una matriz

Reorganización de los elementos de una matriz a de 3×3 a una nueva matriz b que tiene 6×1

import numpy as np 
import numpy as np 
a = np.array([(8, 9, 10),(11,12,13)])
b = a.reshape(6,1)
print("La matriz a es: ",a)
print("La matriz b es: ",b)

La matriz a es:

[[ 8 9 10] [11 12 13]] La matriz b es:

[[ 8] [ 9] [10] [11] [12] [13]] [[ 8] [ 9] [10] [11] [12] [13]]

11.Selección de un elemento de una matriz

import numpy as np 
import numpy as np 
a = np.array([(8, 9, 10),(11,12,13)])
print("El elemento de 0,2 de la matriz a es: ",a[0,2])

El elemento de 0,2 de la matriz a es: 10

12.Extraer los valores una fila y de una columna

import numpy as np 
import numpy as np 
a = np.array([(8, 9, 10),(11,12,13)])
b = np.array([(1, 2, 3),(4,5,6)])
print("Los valores de todas las filas de la columna 1: ",a[0:,1])
print("Los valores de todas las columnas de la fila 1: ",b[1,0:])

Los valores de la columna 2 a partir de los valores que haya a la derecha de la fila 0: [ 9 12] Los valores de la fila 1 a partir de los valores que haya a la derecha de la columna 0: [4 5 6]

13.Transpuesta de una matriz

import numpy as np 
import numpy as np
a = np.array([(1,2,3),(4,5,6),(7,8,9)])
print("La matriz original es: ", a)
print("La transpuesta de la matriz a es: ", a.T)

La matriz original es:

[[1 2 3] [4 5 6] [7 8 9]]

La transpuesta de la matriz a es:

[[1 4 7] [2 5 8] [3 6 9]]

14.Inversa de una matriz

import numpy as np 
import numpy as np
a = np.array([(1,2,3),(4,5,6),(7,8,9)])
print("La matriz original es: ", a)
print("La inversa de la matriz a es: ", np.linalg.inv(a))

La matriz original es:

[[1 2 3] [4 5 6] [7 8 9]] La inversa de la matriz a es:

[[ 3.15251974e+15 -6.30503948e+15 3.15251974e+15] [-6.30503948e+15 1.26100790e+16 -6.30503948e+15] [ 3.15251974e+15 -6.30503948e+15 3.15251974e+15]]

15.Devolución de los índices que ordenan una matriz

import numpy as np 
import numpy as np
a = np.array([5,6,4,3,1,4])
print("La matriz original es: ", a)
print("La matriz ordenada es: ", np.argsort(a))

La matriz original es: [5 6 4 3 1 4] La matriz ordenada es: [4 3 2 5 0 1]

Devolución de los índices que ordenan una matriz en orden inverso

import numpy as np 
import numpy as np
a = np.array([5,6,4,3,1,4])
print("La matriz original es: ", a)
print("La matriz ordenada en orden inverso es: ", np.argsort(a)[::-1])

La matriz original es: [5 6 4 3 1 4] La matriz ordenada en orden inverso es: [1 0 5 2 3 4]

16.Devolución orden de los elementos

import numpy as np 
import numpy as np
a = np.array([5,6,4,3,1,4])
print("La matriz original es: ", a)
print("La matriz ordenada en orden inverso es: ", a[::-1])

La matriz original es: [5 6 4 3 1 4] La matriz ordenada en orden inverso es: [4 1 3 4 6 5]

17.Eliminar una columna o fila de un array

Vamos a utilizar la instrucción np.delete(matriz, indice, axis=None)

axis: Si vale 1 se eliminara por columnas, si vale 0 se eliminara por filas, si no hay valor, eliminará los valores ordenados de la matriz

import numpy as np
a = np.array([(1,2,5),(3,4,8),(9,3,1)])
s1=np.delete(a, 1 ,axis=0)
s2=np.delete(a, 1 ,axis=1)
s3=np.delete(a, 1 ,axis=None)
print("\n1. Matriz original:")
print(a)
print("\n2. Matriz después de eliminar la segunda fila:")
print(s1)
print("\n3. Matriz después de eliminar la segunda columna:")
print(s2)
print("\n4. Matriz después de eliminar el elemento en la posición (1, 1):")
print(s3)

1. Matriz original:[[1 2 5] [3 4 8] [9 3 1]]

2. Matriz después de eliminar la segunda fila:[[1 2 5] [9 3 1]]

3. Matriz después de eliminar la segunda columna:[[1 5] [3 8] [9 1]]

4. Matriz después de eliminar el elemento en la posición (1, 1):[1 5 3 4 8 9 3 1]

Operaciones de suma, resta, multiplicación y división de matrices

import numpy as np
a = np.array([(2,5,1),(3,4,3),(5,1,1)])
b = np.array([(1,6,1),(1,2,1),(1,1,2)])
print("Suma:")
print(a+b)
print("Resta:")
print(a-b)
print("Multiplicacion:")
print(a*b)
print("Division:")
print(a/b)

Suma:[[ 3 11 2] [ 4 6 4] [ 6 2 3]] Resta:[[ 1 -1 0] [ 2 2 2] [ 4 0 -1]] Multiplicacion:[[ 2 30 1] [ 3 8 3] [ 5 1 2]] Division:[[2. 0.83333333 1. ] [3. 2. 3. ] [5. 1. 0.5 ]]

1.Producto de dos matrices

import numpy as np
a = np.array([(2,5,1),(3,4,3),(5,1,1)])
b = np.array([(1,6,1),(1,2,1),(1,1,2)])
s = np.dot(a,b)
print("El producto de las matrices a y b es: ", s)

El producto de las matrices a y b es:

[[ 8 23 9] [10 29 13] [ 7 33 8]]

2.Convertir una matriz de varias dimensiones a una sola dimensión

Toma una matriz con de dos dimensiones y la convierte en un arreglo de una sola dimensión

import numpy as np
a = np.array([[1, 7, 9], [8, 3, 2]])
s=np.ravel(a)
print("La conversión de la dimensión de dos dimensiones a una dimensión es: ", s)

La conversión de la dimensión de dos dimensiones a una dimensión es: [1 7 9 8 3 2]

3.Sumas en una matriz bidimensional a lo largo de sus filas y columnas

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
s1=np.sum(a, axis = 0) #suma las columnas
s2=np.sum(a, axis = 1) #suma las filas
print("La suma de las columnas es: ",s1)
print("La suma de las filas es: ",s2)

La suma de las columnas es: [5 7 9] La suma de las filas es: [ 6 15]

4.Matrices con valores espaciados uniformemente

import numpy as np
a= np.arange(0,40,5)  
b=np.linspace(0,10,5)
print("La matriz que empieza en 0 hasta 35 de 5 en 5 es: ",a)
print("La matriz de cinco valores comprendidos entre 0 y 10 es, ",b)

La matriz que empieza en 0 hasta 35 de 5 en 5 es: [ 0 5 10 15 20 25 30 35] La matriz de cinco valores comprendidos entre 0 y 10 es, [ 0. 2.5 5. 7.5 10. ]