Conceptos b谩sicos de 谩lgebra lineal y configuraci贸n del entorno de trabajo

1

Presentaci贸n del curso y la necesidad del 脕lgebra Lineal

2

Anaconda + Python, Creaci贸n de un entorno y actualizaci贸n de paquetes

3

Uso de Jupyter Notebook

4

Creando las bases, escalares, vectores y matrices. 驴Qu茅 es un tensor? 驴C贸mo se representa?

Realiza operaciones b谩sicas

5

Dimensi贸n de un escalar, vector, matriz o tensor

6

Transposici贸n, suma de matrices y escalares

7

Suma de matrices y vectores (broadcasting)

Operaciones con matrices

8

Producto interno entre una matriz y un vector

9

Producto interno entre dos matrices

10

Propiedades de las matrices: la multiplicaci贸n de matrices es asociativa y distributiva, no es conmutativa

11

Transposici贸n de un producto de matrices

12

C贸mo comprobar la soluci贸n de un sistema de ecuaciones lineal

13

Tipos especiales de matrices: Identidad, Inversa, Singulares

14

Aplicaci贸n de la inversa de una matriz para resolver un sistema de ecuaciones lineales

Sistema de ecuaciones lineales

15

Ejemplos de sistemas sin soluci贸n, con una soluci贸n y con infinitas soluciones

16

Graficar vectores

17

驴Qu茅 es una combinaci贸n l铆neal?

18

驴Qu茅 es un espacio y un subespacio?

19

Vectores linealmente independientes

20

Validar que una matriz tenga inversa

Normas

21

Qu茅 es una norma y para qu茅 se usa. Desigualdad Triangular

22

Tipos de normas: norma 0, norma 1, norma 2, norma infinito y norma L2 al cuadrado

23

El producto interno como funci贸n de una norma y su visualizaci贸n

Matrices y vectores especiales

24

La matriz diagonal y la matriz sim茅trica: sus propiedades

25

Vectores ortogonales, matrices ortogonales y sus propiedades

26

Matrices ortogonales y sus propiedades

Otras funciones de 谩lgebra lineal

27

El determinante y la traza

28

Cierre del curso. Continua con el Curso de 脕lgebra Lineal Aplicada a Machine Learning.

A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Graficar vectores

16/28
Recursos

Aportes 53

Preguntas 11

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Seria muy bueno que platzi diera clases de la libreria matplotlib

Desde google colab lo hice asi

No s茅 si funcione igual en windows o en linux pero aqu铆 dejo la l铆nea para importar el notebook de graficarVectores.ipynb

%run "./funciones_auxiliares/graficarVectores.ipynb"

Si deseas plotting de varias funciones en una sola ventana pero de forma separadas, te paso este sencillo ejemplo:

import matplotlib.pyplot as plt

x = np.arange(1,100,0.2)
y1 = np.sin(x)
y2 = x ** 2 + 2 * x
y3 = np.log(x)
y4 = x + 2

ax1 = plt.subplot(221) # (rows|columns|index)
ax2 = plt.subplot(222)
ax3 = plt.subplot(223)
ax4 = plt.subplot(224)

ax1.plot(x,y1)
ax2.plot(x,y2,'y--')
ax3.plot(x,y3,'r')
ax4.plot(x,y4,'g')

plt.tight_layout()
plt.show()

As铆 me sirvi贸 a mi

%run "funciones_auxiliares\graficarVectores.ipynb"

Me gustar铆a que se explique lo que hace cada m茅todo, como por ejemplo plt.quiver, por todo lo dem谩s, excelente clase! 馃槃

Graficar vectores

En las jupyter notebook escribimos:

%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

v1 = np.array([2,5])
v2 = np.array([3,2])

# vecs: vectores.
# cols: colores.
# alpha: valor de transparencia.
def graficarVectores(vecs, cols, alpha=1):
    plt.figure()
    plt.axvline(x=0, color="grey", zorder=0)
    plt.axhline(y=0, color="grey", zorder=0)
    
    for i in range(len(vecs)):
        # El origen de los vectores inicia en el punto (0,0)
        x = np.concatenate([[0,0], vecs[i]])
        plt.quiver([x[0]],
                  [x[1]],
                  [x[2]],
                  [x[3]],
                  angles='xy', scale_units='xy', scale=1, 
                  color=cols[i], alpha=alpha)

graficarVectores([v1,v2], ['orange', 'blue'])
# Definimos los limites
plt.xlim(-1, 8)
plt.ylim(-1, 8)

Recuerda que a veces es muy buena idea y practica colocar funciones que vamos a llamar reiterada veces en otra jupyter notebook para esto colocamos lo anterior el anterior codigo en una carpeta de funciones importantes y le pondremos de nombre a la notebook graficarVectores.

# Llamos a la funcion de otra notebook a nuestro hilo principal de la sgte manera:
# colocamos el directorio de la notebook a la que vamos a llamar.
%run "./funcionesImportante/graficarVectores.ipynb"

# Luego ejecutamos la ultima linea de codigo, que grafica la funcion para comprobar que se
# ha realizado correctamente.
graficarVectores([v1,v2], ['orange', 'blue'])
plt.xlim(-1, 8)
plt.ylim(-1, 8)

Explicaci贸n de esta clase:

Si ten铆as dudas acerca de la funci贸n graficarVectores() esta explicaci贸n te ser谩 muy 煤til:

En primer lugar, recordemos los dos vectores que deseamos graficar (v1 & v2) y que se usan como ejemplo

import numpy as np
import matplotlib.pyplot as plt

v1 = np.array([2,5])
v2 = np.array([3,2])

Ya que los tenemos como ejemplo prestemos atenci贸n a los puntos de la funci贸n que nos pudieron llegar a confundir, las funciones :

np.concatenate() # // Nos permite concatenar dos arreglos de n煤meros.
plt.quiver # // Nos permite graficar rectas con una flecha al final.

Para entender el funcionamiento de np.concatenate basta con ejemplicar lo que hace en la iteraci贸n n煤mero 0 del ciclo for:

a = np.concatenate( [ [0,0] , v1] ) # Aqu铆 simulamos la primera linea del ciclo for
print(a)

[0, 0, 2, 5] # // Como puedes observar los dos arreglos o listas se fusionaron y este es el resultado

Si repetimos este proceso para el vector v2, este es el resultado:

b = np.concatenate( [ [0,0] , v2] ) # // Aqu铆 simulamos la primera linea del ciclo for pero en la iteracion 1
print(b)

[0, 0, 3, 2] #// Como puedes observar los dos arreglos o listas se fusionaron nuevamente

Ahora veamos que sucede con la funcion plt.quiver():
\
Esta recibe 4 parametros inciales que son las cordenadas de inicio x_inicial , y_inicial y las coordenadas donde finaliza el vector x_final, y_final :

plt.quiver([x[0]], [x[1]], [x[2]], [x[3]]) 

Por otra parte, el parametro scale_units {鈥榓ncho鈥, 鈥榓lto鈥, 鈥榩untos鈥, 鈥榩ulgadas鈥, 鈥榵鈥, 鈥榶鈥, 鈥榵y鈥檥 es opcional y nos permite graficar los vectores con unidades especificas, en este caso en las unidades de este plano(x,y).

De igual forma el parametro angles ayuda a determinar el 谩ngulo de las flechas, esto se explica mejor en la documentacion de MatplotLib https://matplotlib.org/stable/api/as_gen/matplotlib.axes.Axes.quiver.html .

Espero les haya servido mucho la explicaci贸n. Like si te sirvi贸 馃挌鈥 **
And remember Never Stop Learning_**

Excelente clase.




que diferencia hay entre matplotlib inline y matplotlib notebook?

馃悕 Como preparar un buen an谩lisis de datos.

1锔忊儯 Una cucharada de Numpy, https://numpy.org/doc/

2锔忊儯 Una taza de Pandas, https://pandas.pydata.org/docs/

3锔忊儯 Matplotlib, al gusto, https://matplotlib.org

Desde Colab hice estos pasos:

  1. En la parte derecha le di clic a 鈥渇iles鈥 y se abri贸 esa barra lateral.
  2. Clic en 鈥淢ount Drive鈥 (antes al hacer esto sal铆an unas l铆neas de c贸digo, ahora ya no aparecen).
  3. Me apareci贸 la carpeta de Drive y ah铆 busqu茅 el archivo graficarVectores.ipynb.
  4. En los 3 puntitos le di a 鈥淐opy path鈥.
  5. Puse esa direcci贸n despu茅s de %run. Y ya funcion贸.

S茅 que suena algo engorroso, pero en realidad es super sencillo y no toma casi nada de tiempo hacerlo.

les dejo una ligera modificaci贸n para que las dimensiones de la gr谩fica sean autom谩ticas.

<h1>Vamos a hacer una funci贸n que grafique vectores</h1>

def graficavectores(vectores,colores,alpha=1):
#Se determina el 谩rea de la gr谩fica
plt.figure()
# se dibijan los ejems
plt.axvline(x=0,color=鈥済rey鈥,zorder=0)
plt.axhline(y=0,color=鈥済rey鈥,zorder=0)

min_x = 0
max_x = 0
min_y = 0
max_y = 0
for m in range(len(vectores)):
    min_x = min(vectores[m][0],min_x) 
    max_x = max(vectores[m][0],max_x)  
    min_y = min(vectores[m][1],min_y)
    max_y = max(vectores[m][1],max_y)  
plt.xlim(min_x-1,max_x+1)
plt.ylim(min_y-1,max_y+1)

for n in range(len(vectores)):
        x = np.concatenate([[0,0],vectores[n]])
        plt.quiver([x[0]],
                   [x[1]],
                   [x[2]],
                   [x[3]],
                  angles='xy',scale_units='xy',scale=1,
                  color=colores[n],
                  alpha=alpha)

驴qu茅 significa el 鈥榩lt.quiver()鈥 ? 馃槮

La linea de %run para usuarios linux como yo quedaria de esta manera:

%run "./funciones_auxiliares/graficarVectores.ipynb"

Si te arroja es el siguiente error al llamar la funci贸n externa:

Error: No module named nbformat

la soluci贸n es instalar nbformat en el ambiente virtual

Hola!
Entiendo que el objetivo, adem谩s de aprender 谩lgebra lineal, es acostumbrarse al entorno de anaconda y propiamente al de jupyter.
Yo he andando de terco trabajando todo desde la instalaci贸n local de python y, pese a que instal茅 tambi茅n jupyter desde consola y lo puedo invocar, he preferido seguir con el IDE de VSC y no encontr茅 como usar esa parte del %run ah铆.

Pero encontr茅 una librer铆a que se llama importlib que de igual forma, permite cargar funciones como librer铆as para ser ejecutadas. As铆 qued贸 mi script de prueba de la funci贸n en un script externo.
Yo genero el vector por medio de escalares aleatorios y paso esas variables como entrada de mi funci贸n externa:

# Se genera un script para crear vectores aleatorios para usar script graficador
import numpy as np
import random
import importlib.util
from icecream import ic
import matplotlib.pyplot as plt

v_escalar1 = int(random.choice((1, 3, 5)))
v_escalar2 = int(random.choice((1, 2, 4, 5)))

def run():

    
    '''
    Como no pude usar el metodo del profesor, lo hice por medio la libreria de importar librerias
    Se define la cabecera indicando nombre y ruta con extensi贸n
    Luego se inportan los m贸dulos y al final se ejecutan
    '''
    spec = importlib.util.spec_from_file_location('graficarVectores', './utils/graficarVectores.py')
    foo = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(foo)
    
    vector1 = np.array([v_escalar1, v_escalar1 + v_escalar2])
    vector2 = np.array([v_escalar2 + v_escalar1, v_escalar2])
    ic(vector1)
    ic(vector2)


    foo.graficarVectores([vector1, vector2], ['blue', 'black'])
    plt.xlim(-1, 12)
    plt.ylim(-1, 12)
    plt.show()


if __name__ == '__main__':
    run()

En linux me funciono el run de la siguiente manera

%run ..//funciones_auxiliares/"graficarVectores.ipynb"

en mac me funciono

%run "../funciones_auxiliares/graficarVectores.ipynb"

:

para los que tienen problemas con el %run, lo m谩s seguro es por c贸mo tienen ordenados sus archivos, ya que el profesor tiene el archivo de la clase en una carpeta, y al dirigirse a un archivo fuera de esta, usa 鈥溾︹ para referirse a la carpeta contenedora de la que est谩 usando, y en la que est谩 funciones_auxiliares tambi茅n

les recomiendo el curso de terminal y l铆nea de comandos, aunque pueden aprender a utilizar la terminal por ustedes mismos, el punto es perderle el miedo, adem谩s les recomiendo aprender linux ya que es una de las herramientas m谩s poderosas que pueden tener

si usas linux o mac y tienes tus carpetas organizadas igual que el profesor, solo cambia los 鈥淺鈥 por 鈥/鈥, y para todos los OS, si tienes funciones_auxiliares en el mismo directorio que visualizar vectores, quita los 鈥溾︹ ya que hacen referencia a la carpeta contenedora

espero haberme dado a entender, si tienen preguntas me lo pueden decir 馃槃

dejo un pseudo gr谩fico para que me entiendan mejor

funciones_auxiliares:
`-- graficar_vectores.ipynb
sistema_de_ecuaciones_lineales:
|-- comprobacion_sistema_de_ecuaciones_lineal.ipynb
|-- graficar_vectores.ipynb
|-- inversa_para_resolver_ecuaciones_lineales.ipynb
`-- soluciones_sistema_de_ecuaciones.ipynb```

No se porque en el video se usa el caracter \ en vez de /.
En mi caso funciona perfecto usando /. Les comparto la manera en que lo hago.

%run "./funciones_auxiliares/graficarVectores.ipynb"```

En deepnote se importan de forma automatica cuando son notebooks del mismo proyecto

El archivo en el que se hace correr el programa principal tiene que estar en una carpeta al igual que la funcion auxiliar si esta libre en la carpeta FundamentosAL saldra error en la linea %run 鈥 馃憖

Es un misterio para mi que representan x[0], x[1], x[2] y x[3].

Desde Deepnote: %run 鈥溾/Funciones/graficarVectores.ipynb鈥

A mi me funciono la funci贸n auxiliar con la siguiente ruta:

%run ".\\funciones_auxiliares\graficarVectores.ipynb"

Si usan la plataforma de DeepNote la ruta de acceso seria:

si se encuentran en la misma carpeta

%run '/work/funcionesauxiliares.ipynb'

si el notebook se encuentra en una carpeta aparte

%run '/work/Curso Fundamentos de Algebra/carpeta/funcionesauxiliares.ipynb'

Solucion de error al usar %run
El profe nos ense帽a a llamar la funci贸n con:

%run "..\\Funciones_Auxilares/graficar_vectores.ipynb"

Pero cuando corro el codigo sale el error:

Exception: File `'..\\\\Funciones_Auxilares/graficar_vectores.ipynb.py'` not found.

Como ven me agrega dos varas inclinadas de m谩s, as铆 que deduc铆 que internamente Jupyter te pone las barras, simplemente lo cambi茅 por:

%run "Funciones_Auxilares/graficar_vectores.ipynb"

y sirvi贸 馃槃

PARA WINDOWS

%run 鈥./funciones_auxiliares/graficar_vectores.ipynb鈥

Hay que tener en cuenta las rutas que el profe utiliza, sus notebooks de las clases est谩n dentro de carpetas, por eso utiliza doble punto 鈥溾鈥 para subir un nivel en el 谩rbol de carpetas, si no estamos utilizando subcarpetas con 鈥.\鈥 nos funcionar谩 adecuadamente

Para los que est谩n trabajando con Google Colab, el m茅todo que uso para trabajar con archivos en carpetas internas es el siguiente:

Importar drive en el espacio de trabajo y vincular con su cuenta de google:

from google.colab import drive
drive.mount('/content/drive')

Aqu铆 para vincular les pedir谩 un c贸digo de acceso que obtendr谩n del link que se les mostrar谩 al momento de ejecutar el c贸digo. Con esto ya est谩n listos para importar el archivo:

%run 'ubicacion archivo drive'

En mi caso para la funci贸n graficarVectores, lo encuentro as铆:

%run '/content/drive/My Drive/Mau/cursos/Fundamentos de 脕lgebra lineal con python/funciones_auxiliares/graficarVectores.ipynb'

Y listo, ya pueden trabajar con su funci贸n.

Funciono bien en DeepNote:

si alguien no puede importar el notebook y le sale este error

ModuleNotFoundError: No module named 'nbformat'

les recomiendo instalar o actualizar la librer铆a nbformat por medio de pip o canda

pip install nbformat

para los que lo est谩n haciendo en google colab
este tutorial les servir谩 mucho
https://www.youtube.com/watch?v=8jWvmfK_Yo0

Exelente clase, me parecio algo muy profesional

A mi me funciono de la siguiente forma:
%run 鈥.\funciones_auxiliares\graficarVectores.ipynb鈥

y estoy en windows

me estuve peleando con la ruta hasta que pude hacerlo 馃槃 a mi me funcion贸
%run 鈥溾/FundamentosAL/Funciones_Auxiliares/graficarVectores.ipynb鈥
馃槂

Dejo la version de graficando vectores , que dibuja una grilla y encuentra el xmax y ymax automaticamente.

def graficarVectores(vectores, colores, alpha = 1):
    
    plt.figure()
    plt.axvline(x = 0, color='red', zorder = 0)
    plt.axhline(y = 0, color='red', zorder = 0)
    plt.grid(zorder = 0)
    xmax = 0
    ymax = 0
    
    for i in range(len(vectores)):
        x = np.concatenate([[0,0], vectores[i]])
        plt.quiver([x[0]],
                   [x[1]],
                   [x[2]],
                   [x[3]],
                   angles = 'xy',
                   scale_units = 'xy',
                   scale = 1,
                   color = colores[i],
                   alpha = alpha)
        if vectores[i][0] > xmax:
            xmax = vectores[i][0]
        if vectores[i][1] > ymax:
            ymax = vectores[i][1]    
    plt.xlim(-1, xmax + 1)
    plt.ylim(-1, ymax + 1)

Algo que me funciono para el %run por lo menos en Colaboratory:
-A帽adir mi drive
-Tocar la funcion y copiar ruta de acceso
%run 鈥Ruta de acceso

lito

Hi people鈥檚, les comparto como graficar con pyplot de forma r谩pida varias funciones en un solo plot:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-100,101,1)      # Array x
y1 = 25 * x ** 2 - 2 * x       # y1 = 0.5x虏+2x
y2 = ((0.5 * x ** 2) // 2 * x)  # y2 = 陆x虏/2x
y3 = np.sin(0.25 * x) * 250000 # y3= 250K sin(录x)

#================================================
plt.plot(x,y1,'r.')
plt.plot(x,y2,'b--')
plt.plot(x,y3,'y')
plt.show()

yo lo hice en mac y escribi el siguinete codigo
%run 鈥溾//funciones_auxiliares/graficarVectores.ipynb鈥

muy buen truco el del run y las funciones

Tambien seria muy chevere que ense帽ara las otras librerias como sklearn, pandas, platform, etc鈥

Excelente metodo de %run

Nota.
Para reutilizar las funciones de otro notebook de jupyter:

%run <route>
def graficarVectores(vecs, cols, alpha = 1):
    plt.figure()
    plt.axvline(x=0, color='grey', zorder = 0)
    plt.axhline(y=0, color='grey', zorder = 0)
    
    for i in range(len(vecs)):
        x = np.concatenate([[0,0], vecs[i]])
        plt.quiver( [x[0]],
                    [x[1]],
                    [x[2]],
                    [x[3]],
                    angles = 'xy', scale_units='xy',scale=1, color = cols[i],
                    alpha = alpha)

graficarVectores([v1,v2], ['orange', 'blue'])
plt.xlim(-1,8)
plt.ylim(-1,8)```

se puede hacer lo mismo de llamar funciones en google collab?

despues de mucho tiempo asi me funcion贸:
%run 鈥./funciones_auxiliares/graficarVectores.ipynb鈥

Excelente esta clase, para la reutilizaci贸n de funciones

Hola les comparto gr谩ficos de barra o Bar Charts con Matplotlib:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import style
style.use('bmh')
#=============Tuples==========================
python = (85, 67, 23, 98)
java = (50, 67, 89, 14)
networking = (60, 20, 56, 22)
machine_learning = (88, 23, 10, 87)
#=========List of Name========================
peolple = ['Bob', 'Anna', 'John', 'Marks']
#=============================================
index = np.arange(4)
#=============================================
plt.bar(index, python, width=0.2, label="Python")
plt.bar(index + 0.2, java, width=0.2, label="Java")
plt.bar(index + 0.4, networking, width=0.2, label="Networking")
plt.bar(index + 0.6, machine_learning, width=0.2, label="Machine Learning")
#============Legend and Label==============================================
plt.title("IT Skill Levels")
plt.xlabel("Person")
plt.ylabel("Skill Level")
plt.xticks(index + 0.3, peolple)
plt.legend(loc='upper right')
plt.ylim(0, 150)
#==============================================
plt.show()

Si desean otro Style aca les dejo el enlace:
[Style_Sheets(https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html#sphx-glr-gallery-style-sheets-style-sheets-reference-py)

Tambien puedes imprimir en ventanas peradas lo que desees:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1,100,0.2)
y1 = np.sin(x)
y2 = x ** 2 + 2 * x
y3 = np.log(x)
y4 = x + 2
#==========================================
plt.figure(1)
ax1 = plt.subplot(211) # (rows|columns|index)
ax1.plot(x,y1)
ax2 = plt.subplot(212) # (rows|columns|index)
ax2.plot(x,y2,'y--')
#==========================================
plt.figure(2)
plt.plot(x,y1,'r--')
#==========================================
plt.figure(3)
ax3 = plt.subplot(212) # (rows|columns|index)
ax3.plot(x,y3,'r')
ax4 = plt.subplot(211) # (rows|columns|index)
ax4.plot(x,y4,'g')
#==========================================
plt.show()

Figure(1):

Figure(2):

Figure(3):