Platzi
Platzi

¡Invierte en ti y celebremos! Adquiere un plan Expert o Expert+ a precio especial.

Antes: $349
$259
Currency
Antes: $349
Ahorras: $90
COMIENZA AHORA
Termina en: 13D : 7H : 51M : 46S

Debes iniciar sesión

Para ver esta clase crea una cuenta sin costo o inicia sesión

Podemos y debemos pensar a las matrices como transformaciones lineales2/18

Por si no entendieron . Lo que el profe quiso transmitir es que las matrices aplicadas a vectores se les puede ver como una transformacion lineal a ese vector . En este caso la transformacion es una rotacion en el sentido antihorario .

hola.jpg

Explicación para los que se inclinan más por el fundamento matemático:
Sea AxB=C
El producto interno entre Anxm y Boxp dónde n,o son las filas y m,p son las columnas, para que AxB pueda existir cómo producto, se debe cumplir que n=o, y las dimensiones de la matriz resultante © será siempre nxp, entonces, si vas probando a lápiz y papel con dimensiones que a ti se te ocurran (pares dimensionales que cumplan con la condicion de producto interno) te vas a dar cuenta que todas las operaciones tranforman, o bien a la primera matriz o a la segunda, la única excepción a esta regla, es que ambas matrices sean cuadradas, lo cuál nos deja la siguiente conclusión
Las matrices son intrínsecamente transformaciones lineales en dónde el espacio es transformado con ciertas excepciones

Sería genial ver a este profe en todos los cursos de machine learning.

Matrices

  • Podemos ver a las matrices como transformaciones lineales del espacio sobre el que se aplican, es decir deforman los puntos del espacio sobre el que se aplican, trasladándolos, alargándolos o rotándolos.

Nota:
.flatten() → convierte el vector o matriz en un vector fila

Básicamente lo que hace el profe Sebastian es mostrarnos el resultado de la ecuación de un sistema de ecuaciones lineal con dos incógnitas A*x = b como se ve en la imagen. Donde A es la matriz [[-1,3], [2,-2]], x es el vector columna [[2],[1]] (graficado en azul) y b es el vector columna [[1], [2]] obtenido como respuesta (graficado en naranja).

El tiene que aplicar la función flatten() porque la función que él creó graficarVectores() no acepta vectores columna o matrices “normales”.

CodeCogsEqn.png

Para los que estan haciendo la prectica en Windows debe ir %run “funciones_auxiliares\graficarVectores.ipynb”

Introducción:


A las matrices las podemos pensar como transformaciones lineales que cuando las aplicamos a un espacio o a un vector generan una transformación. La transformación en el caso de un vector podría ser cuando se estira, se achica o incluso cuando generamos una rotación.






Código visto en clase:

# Importamos las bibliotecas

%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

# Definimos una matriz 

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

# Generamos un vector

vector = np.array([[2],[1]])
print(vector)

# Miramos la ruta en donde estamos
import os

os.getcwd()

# # Importamos nuestra función para graficar. 
%run ".\\Funciones auxiliares\graficarVectores.ipynb"

# Mostramos que es lo que tenemos como vector 
print(vector)

# Esta función nos devolverá como una fila nuestro vector que estaba definido como una columna   
print(vector.flatten())

# Imprimimos la matriz normal 
print(A)

# Ahora vemos como la función flatten nos muestra toda la matriz como una sola fila
print(A.flatten())

# Graficamos vectores con nuestra función y le daremos como parámetro el vector flatten.  
graficarVectores([vector.flatten()], cols = 'blue')

plt.xlim(-0.5, 3)
plt.ylim(-0.5, 2)


# Definimos nuestro vector transformado
vector_transformado = A.dot(vector)
print(vector_transformado)

# Graficamos vectores con nuestra función, de daremos como parámetro el vector flatten y el vector transformado 

graficarVectores([vector.flatten(), vector_transformado.flatten()],
                cols = ['blue', 'orange'])
plt.xlim(-0.5, 2.5)
plt.ylim(-0.5, 2.5)

# Obtenemos el determínate de una nuestra trasformación 
print(np.linalg.det(A))

# Obtenemos las normas de los vectores. 
print(np.linalg.norm(vector))
print(np.linalg.norm(vector_transformado))

Hola, estoy usando Google Colab, tengo el mismo código del vídeo, pero no puedo graficar nada, alguien me puede ayudar? Este es el archivo:

https://colab.research.google.com/drive/1WYz5wln5xVu7vxrvE6DO9C_q5wXTuAEi

La función graficarVectores que sale en el video, le falta una parte: color = cols[i]
def graficarVectores(vecs, cols, alpha = 1):

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
              )

Así es como quedaría al final para que se ejecute correctamente.

No se si sea porque yo trabajo en Ubuntu, pero me marcaba error al tratar de importar la función ‘graficarVector’ como lo hace el profe, así que yo lo pude hacer con la línea:

%run ‘./Funciones_auxiliares/my_functions.ipynb’

Suponeiendo que ‘my_functions.ipynb’ esta en la carpeta ‘Funciones_auxiliares’

Una **transformación lineal ** es básicamente una función, solo que toma como parámetro de entrada a un vector y devuelve como salida a otro vector.

Se dice que una matriz representa una transformación lineal, porque si multiplicas a una matriz por un vector, obtienes como resultado otro vector.

Notebook de la función para graficar:

# Recibirá los vectores, los colores y el nivel de trasparencia con el cual trabajaremos 

def graficarVectores(vecs, cols, alpha = 1):
    
    # Agregamos el eje vertical. Este se cruzará en x = 0, el color será gris y el orden de z será 0 
    plt.axvline(x = 0, color = "grey", zorder = 0)
    # Agregamos el eje horizontal. Este se cruzará en y = 0, el color será gris y el orden de z será 0 
    plt.axhline(y = 0, color = "grey", zorder = 0)
    
    # Ahora ara cada uno de los vectores en el parámetro 
    for i in range(len(vecs)):
        # Tomaremos que la x es la concatenación de esos valores como 0 0 que es lo que estamos tomando como punto de origen 
        # Después de agregar el 0 0 le concatenamos el vector i 
        x = np.concatenate([[0,0], vecs[i]])
        # Vamos a graficar y agregamos todas las coordenadas
        plt.quiver([x[0]],
                   [x[1]],
                   [x[2]],
                   [x[3]],
                   # Los ángulos estarán expresados en xy y la escuela de unidad será xy 
                   angles = 'xy', scale_units = 'xy',
                   # La escala con la que graficaremos será 1 
                   scale = 1,
                   color = cols[i],
                   alpha = alpha
                  )

Yo utilice este código en mac para que tomara la carpeta de funciones, espero y le sirva.
%run “…//funciones_auxiliares/graficarVectores.ipynb”

Por si no entendieron . Lo que el profe quiso transmitir es que las matrices aplicadas a vectores se les puede ver como una transformacion lineal a ese vector . En este caso la transformacion es una rotacion en el sentido antihorario .

hola.jpg

Explicación para los que se inclinan más por el fundamento matemático:
Sea AxB=C
El producto interno entre Anxm y Boxp dónde n,o son las filas y m,p son las columnas, para que AxB pueda existir cómo producto, se debe cumplir que n=o, y las dimensiones de la matriz resultante © será siempre nxp, entonces, si vas probando a lápiz y papel con dimensiones que a ti se te ocurran (pares dimensionales que cumplan con la condicion de producto interno) te vas a dar cuenta que todas las operaciones tranforman, o bien a la primera matriz o a la segunda, la única excepción a esta regla, es que ambas matrices sean cuadradas, lo cuál nos deja la siguiente conclusión
Las matrices son intrínsecamente transformaciones lineales en dónde el espacio es transformado con ciertas excepciones

Sería genial ver a este profe en todos los cursos de machine learning.

Matrices

  • Podemos ver a las matrices como transformaciones lineales del espacio sobre el que se aplican, es decir deforman los puntos del espacio sobre el que se aplican, trasladándolos, alargándolos o rotándolos.

Nota:
.flatten() → convierte el vector o matriz en un vector fila

Básicamente lo que hace el profe Sebastian es mostrarnos el resultado de la ecuación de un sistema de ecuaciones lineal con dos incógnitas A*x = b como se ve en la imagen. Donde A es la matriz [[-1,3], [2,-2]], x es el vector columna [[2],[1]] (graficado en azul) y b es el vector columna [[1], [2]] obtenido como respuesta (graficado en naranja).

El tiene que aplicar la función flatten() porque la función que él creó graficarVectores() no acepta vectores columna o matrices “normales”.

CodeCogsEqn.png

Para los que estan haciendo la prectica en Windows debe ir %run “funciones_auxiliares\graficarVectores.ipynb”

Introducción:


A las matrices las podemos pensar como transformaciones lineales que cuando las aplicamos a un espacio o a un vector generan una transformación. La transformación en el caso de un vector podría ser cuando se estira, se achica o incluso cuando generamos una rotación.






Código visto en clase:

# Importamos las bibliotecas

%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

# Definimos una matriz 

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

# Generamos un vector

vector = np.array([[2],[1]])
print(vector)

# Miramos la ruta en donde estamos
import os

os.getcwd()

# # Importamos nuestra función para graficar. 
%run ".\\Funciones auxiliares\graficarVectores.ipynb"

# Mostramos que es lo que tenemos como vector 
print(vector)

# Esta función nos devolverá como una fila nuestro vector que estaba definido como una columna   
print(vector.flatten())

# Imprimimos la matriz normal 
print(A)

# Ahora vemos como la función flatten nos muestra toda la matriz como una sola fila
print(A.flatten())

# Graficamos vectores con nuestra función y le daremos como parámetro el vector flatten.  
graficarVectores([vector.flatten()], cols = 'blue')

plt.xlim(-0.5, 3)
plt.ylim(-0.5, 2)


# Definimos nuestro vector transformado
vector_transformado = A.dot(vector)
print(vector_transformado)

# Graficamos vectores con nuestra función, de daremos como parámetro el vector flatten y el vector transformado 

graficarVectores([vector.flatten(), vector_transformado.flatten()],
                cols = ['blue', 'orange'])
plt.xlim(-0.5, 2.5)
plt.ylim(-0.5, 2.5)

# Obtenemos el determínate de una nuestra trasformación 
print(np.linalg.det(A))

# Obtenemos las normas de los vectores. 
print(np.linalg.norm(vector))
print(np.linalg.norm(vector_transformado))

Hola, estoy usando Google Colab, tengo el mismo código del vídeo, pero no puedo graficar nada, alguien me puede ayudar? Este es el archivo:

https://colab.research.google.com/drive/1WYz5wln5xVu7vxrvE6DO9C_q5wXTuAEi

La función graficarVectores que sale en el video, le falta una parte: color = cols[i]
def graficarVectores(vecs, cols, alpha = 1):

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
              )

Así es como quedaría al final para que se ejecute correctamente.

No se si sea porque yo trabajo en Ubuntu, pero me marcaba error al tratar de importar la función ‘graficarVector’ como lo hace el profe, así que yo lo pude hacer con la línea:

%run ‘./Funciones_auxiliares/my_functions.ipynb’

Suponeiendo que ‘my_functions.ipynb’ esta en la carpeta ‘Funciones_auxiliares’

Una **transformación lineal ** es básicamente una función, solo que toma como parámetro de entrada a un vector y devuelve como salida a otro vector.

Se dice que una matriz representa una transformación lineal, porque si multiplicas a una matriz por un vector, obtienes como resultado otro vector.

Notebook de la función para graficar:

# Recibirá los vectores, los colores y el nivel de trasparencia con el cual trabajaremos 

def graficarVectores(vecs, cols, alpha = 1):
    
    # Agregamos el eje vertical. Este se cruzará en x = 0, el color será gris y el orden de z será 0 
    plt.axvline(x = 0, color = "grey", zorder = 0)
    # Agregamos el eje horizontal. Este se cruzará en y = 0, el color será gris y el orden de z será 0 
    plt.axhline(y = 0, color = "grey", zorder = 0)
    
    # Ahora ara cada uno de los vectores en el parámetro 
    for i in range(len(vecs)):
        # Tomaremos que la x es la concatenación de esos valores como 0 0 que es lo que estamos tomando como punto de origen 
        # Después de agregar el 0 0 le concatenamos el vector i 
        x = np.concatenate([[0,0], vecs[i]])
        # Vamos a graficar y agregamos todas las coordenadas
        plt.quiver([x[0]],
                   [x[1]],
                   [x[2]],
                   [x[3]],
                   # Los ángulos estarán expresados en xy y la escuela de unidad será xy 
                   angles = 'xy', scale_units = 'xy',
                   # La escala con la que graficaremos será 1 
                   scale = 1,
                   color = cols[i],
                   alpha = alpha
                  )

Yo utilice este código en mac para que tomara la carpeta de funciones, espero y le sirva.
%run “…//funciones_auxiliares/graficarVectores.ipynb”