import numpy as npIntroducción a Python - Parte 4
Libreria Numpy
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
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.
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 arrayCrear 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 desdeiniciohastafintomando valores cadasalto.
# Función arangenp.linspace(inicio, fin, n):Crea y devuelve un array de una dimensión cuyos elementos son la secuencia denvalores equidistantes desdeiniciohastafin.
# Función linspaceAcceder a los elementos de una matriz
l[a,b]: Retornan los elementos de la filaay la columnab.: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 1array = 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 propioautovalores[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/