import numpy as np
Introducció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 array
Crear matrices
# Matriz diagonal
= np.array([[3,4,1],
m 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:
= np.array([[2,3,4],[2,6,4],[4,2,9]])
array
# 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 desdeinicio
hastafin
tomando valores cadasalto
.
# Función arange
np.linspace(inicio, fin, n):
Crea y devuelve un array de una dimensión cuyos elementos son la secuencia den
valores equidistantes desdeinicio
hastafin
.
# Función linspace
Acceder a los elementos de una matriz
l[a,b]
: Retornan los elementos de la filaa
y la columnab
.:
Selecciona todo.
= np.array([[2,3,5],
m 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
= np.array([[3,56,21,2],
array 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.
= np.array([3,56,21,2,6,32,1])
array 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
= np.array([1, 2, 3])
a = np.array([1, 0, 1])
b
= np.array([[1, 2, 3],
a1 4, 5, 6]])
[= np.array([[3, 5, 1],
b1 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
= np.array([[1, 2, 3],
a 4, 5, 6]])
[
= np.array([[1, 1],
b 2, 2],
[3, 3]]) [
# Matriz transpuesta
# Traza de una matriz
= np.array([[1, 2, 3],
a 4, 5, 6],
[7, 8, 9]]) [
# Determinante de una matriz
= np.array([[1, 2, 3],
a 4, 5, 6],
[7, 8, 9]]) [
# Matriz inversa
= np.array([[1, 2],
matriz 3, 4]]) [
# Suma de la matriz por columna
# Suma de la matriz por fila
[4 6]
[3 7]
# Hallar el promedio
= np.array([[1, -1], [2, -2], [3, -3]])
array
= np.mean(array, axis=0)
meanByCols = np.mean(array, axis=1)
meanByRows
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
= np.array([[1, 1, 0], [1, 2, 1], [0, 1, 1]])
a
= np.linalg.eig(a)
autovalores, autovectores 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
= np.array([[3, 2], [1, 6]])
a = np.array([1, 3])
b 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/