Open In Colab

Introducción a Python - Parte 4

Libreria Numpy


Numpy Logo

Numpy es una librería de Python especializada en el cálculo numérico y el análisis de datos, especialmente cuando se tiene un gran volumen de datos. Incluye funciones para operaciones de muchos tipos, matemáticas, de lógica, de ordenación, estadísticas, de entrada y salida para leer y escribir ficheros, etcétera. En el siguiente link puede encontrar mas información sobre esta librería: https://numpy.org/doc/stable/index.html

Para poder utilizar Numpy primero hay que instalarlo ya que es modulo externo. Por ejemplo, si se esta trabajando Python en conda, se debe abrir la terminal (Anaconda Prompt) y escribir conda install numpy.

Una vez instalado, la forma más común de importar esta librería en nuestro archivo de trabajo es utilizando el alias np

import numpy as np

La ventaja de Numpy frente a las listas predefinidas en Python es que el procesamiento de los arrays se realiza mucho más rápido que las listas, lo cual la hace ideal para el procesamiento de vectores y matrices de grandes dimensiones.

Ejemplo

Numpy esta basado en el objeto ndarray el cual es multidimensional, lo cual significa que permite representar tanto valores esacalares como vectores, matrices y matrices multidimensionales.

Numpy Logo

Referencia: https://predictivehacks.com/tips-about-numpy-arrays/

Se tienen diferentes maneras de crear un array por ejemplo, utilizandos funciones que ya se encuentran implementadas en Numpy

# Crear un vector de ceros
# Crear una matriz de ceros
# Crear un vector de unos
# Crear una matriz de unos
# Crear vector y matriz vacia
# Vector con valores aleatorios

''' Esta funcion devuelve numeros enteros aleatorios desde [a,b) 
np.random.randint(a,b, size=None, dtype=int) en el parametro size se especifica 
la dimension del vector o matriz a crear'''
# Copiar un array

Crear matrices

# Matriz diagonal
m = np.array([[3,4,1],
              [6,8,2],
              [1,3,6]])
# Diagonal -1

# Diagonal 1
# Matriz diagonal (diag)
# Matriz identidad
# Matriz de un mismo valor
# Matriz de numeros aleatorios 


''' Esta funcion devuelve numeros enteros aleatorios desde [a,b) 
np.random.randint(a,b, size=None, dtype=int) en el parametro size se especifica 
la dimension del vector o matriz a crear'''
' Esta funcion devuelve numeros enteros aleatorios desde [a,b) \nnp.random.randint(a,b, size=None, dtype=int) en el parametro size se especifica \nla dimension del vector o matriz a crear'

Para obtener información de las características del array creado, existen diferentes atributos y funciones:

array = np.array([[2,3,4],[2,6,4],[4,2,9]])

# Dimensión

# Dimensiones del array, lo devuelve como tupla

# Numero total de elementos del array

# Tipo de datos de los elementos del array a.

Función arange y linspace

  • np.arange(inicio, fin, salto): Crea y devuelve un array de una dimensión cuyos elementos son la secuencia desde inicio hasta fin tomando valores cada salto.
# Función arange
  • np.linspace(inicio, fin, n): Crea y devuelve un array de una dimensión cuyos elementos son la secuencia de n valores equidistantes desde inicio hasta fin.
# Función linspace

Acceder a los elementos de una matriz

  • l[a,b]: Retornan los elementos de la fila a y la columna b.
  • : Selecciona todo.
m = np.array([[2,3,5], 
              [6,3,8],
              [9,5,1]])

# Selecciona todos los elementos


# Selecciona la primera fila


# Selecciona la primera columna


# Selecciona la ultima fila


# Selecciona la ultima columa


# Valor en la posicion fila 1, columna 1
array = np.array([[3,56,21,2],
                 [6,9,6,1],
                 [11,2,4,36],
                 [7,22,12,5]])

print(array,"\n")

# Selecciona todas las filas y de la columna 1 a la 2


# Selecciona de la fila 1 a la 2 y de la columna 1 a la 2
[[ 3 56 21  2]
 [ 6  9  6  1]
 [11  2  4 36]
 [ 7 22 12  5]] 

Acceder a los elementos de un vector de una dimensión funciona igual que manejar listas.

array = np.array([3,56,21,2,6,32,1])
print(array)

# Selecciona todo el vector


# Seleccionar elemento en especifico


# Selecciona elementos de la posicion 2 hasta la posicion 4
[ 3 56 21  2  6 32  1]
[21  2  6]

Álgebra matricial

a = np.array([1, 2, 3])
b = np.array([1, 0, 1])

a1 = np.array([[1, 2, 3], 
              [4, 5, 6]])
b1 = np.array([[3, 5, 1], 
              [7, 0, 3]])
# Sumar
print(a + b)
print("")
print(a1 + b1)
[2 2 4]

[[ 4  7  4]
 [11  5  9]]
# Restar
print(a - b)
print("")
print(a1 + b1)
[0 2 2]

[[ 4  7  4]
 [11  5  9]]
# Funciona igual para vectores de una dimension

print( 3*a1 )
print("")
print( a1/3 )
print("")
print( a1/b1)
[[ 3  6  9]
 [12 15 18]]

[[0.33333333 0.66666667 1.        ]
 [1.33333333 1.66666667 2.        ]]

[[0.33333333 0.4        3.        ]
 [0.57142857        inf 2.        ]]
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:7: RuntimeWarning: divide by zero encountered in true_divide
  import sys
# Producto escalar de dos vectores
# Norma de un vector
# Producto de dos matrices
a = np.array([[1, 2, 3], 
              [4, 5, 6]])

b = np.array([[1, 1], 
              [2, 2], 
              [3, 3]])
# Matriz transpuesta
# Traza de una matriz
a = np.array([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9]])
# Determinante de una matriz
a = np.array([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9]])
# Matriz inversa
matriz = np.array([[1, 2], 
                   [3, 4]])
# Suma de la matriz por columna

# Suma de la matriz por fila
[4 6] 

[3 7] 
# Hallar el promedio

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

meanByCols = np.mean(array, axis=0)
meanByRows = np.mean(array, axis=1) 
 

print('Media por columnas: ')
print(meanByCols)
print('Media por filas:')
print(meanByRows)
Media por columnas: 
[ 2. -2.]
Media por filas:
[0. 0. 0.]

Autovalores y autovectores de una matriz

a = np.array([[1, 1, 0], [1, 2, 1], [0, 1, 1]])

autovalores, autovectores = np.linalg.eig(a)
print(autovalores,"\n")
print(autovectores,"\n")
[ 3.00000000e+00  1.00000000e+00 -3.36770206e-17] 

[[-4.08248290e-01  7.07106781e-01  5.77350269e-01]
 [-8.16496581e-01  2.61239546e-16 -5.77350269e-01]
 [-4.08248290e-01 -7.07106781e-01  5.77350269e-01]] 

Nota: La columna autovectores[:,i] es el vector propio correspondiente al valor propio autovalores[i]. Los autovectores estan por columna.

print("Autovector asociado al tercer autovalor")
print(autovalores[2])
print(autovectores[:,2])

Resolver sistema de ecuaciones

Sistema de dos ecuaciones y dos incognitas

3x + 2y = 1
x + 6y = 3
a = np.array([[3, 2], [1, 6]])
b = np.array([1, 3])
print(np.linalg.solve(a, b))
[0.  0.5]

Guardar y leer array en archivo

Guardar

np.save("nombre_archivo", array_para_guardar)

Leer

Por defecto un array se guarda con la extensión .npy

np.save("nombre_archivo.npy")

Esta parte la podemos trabajar en Spyder para que el manejo de archivos sea mas facil

Leer base de datos con numpy

Vamos a trabajarlo desde Spyder sin embargo, aquí se encuentra la sintaxis de la función que nos permite cargar base de datos:

loadtxt(fname, dtype=float, comments='#', delimiter=None,
            converters=None, skiprows=0, usecols=None, unpack=False,
            ndmin=0, encoding='bytes', max_rows=None, *, like=None):

Tambien, se puede utilizar la libreria Pandas

pd.read_csv('data.csv', delimiter=' ')

Referencias

https://numpy.org/doc/stable/reference/arrays.html

https://aprendeconalf.es/docencia/python/manual/numpy/