< Return to Video

GAN CAP01 2025 VA05 APLICACAO EM PYTHON

  • 0:08 - 0:12
    Agora que você já sabe o que é
    um modelo de IA generativa,
  • 0:12 - 0:17
    nós vamos dar um mergulho
    mais profundo e começar a ver
  • 0:17 - 0:20
    como podemos implementar
    esses modelos na prática.
  • 0:20 - 0:25
    Para isso, precisamos conhecer
    a base desses modelos.
  • 0:25 - 0:26
    A base para modelos
    de IA generativa
  • 0:26 - 0:28
    são redes neurais
    artificiais,
  • 0:28 - 0:32
    e a base para redes neurais
    artificiais é álgebra linear.
  • 0:32 - 0:37
    Então, nesse laboratório, veremos
    uma revisão sobre álgebra linear
  • 0:37 - 0:41
    utilizando a biblioteca
    NumPy do Python.
  • 0:41 - 0:45
    Álgebra linear, basicamente, é
    como podemos fazer operações
  • 0:45 - 0:47
    com vetores e matrizes.
  • 0:47 - 0:49
    Então, para começar
    esse laboratório,
  • 0:49 - 0:52
    a gente vai começar a relembrar
    um pouco sobre vetores
  • 0:52 - 0:56
    e ver como podemos representar
    esses vetores no Python.
  • 0:56 - 1:00
    Para isso, a gente vai utilizar
    a biblioteca NumPy do Python.
  • 1:00 - 1:05
    Essa biblioteca é especializada
    em cálculo numérico e álgebra linear,
  • 1:05 - 1:08
    então é a principal biblioteca
    do Python para esse fim.
  • 1:08 - 1:12
    Então, vamos começar o nosso
    código importando essa biblioteca
  • 1:12 - 1:14
    para dentro do código.
  • 1:14 - 1:17
    Então, "import numpy as np".
  • 1:17 - 1:21
    Bom, para definir
    um vetor no NumPy,
  • 1:21 - 1:26
    eu posso utilizar o módulo
    "array" do NumPy.
  • 1:26 - 1:29
    Então, se eu criar
    um "vetor_a = np.array"
  • 1:29 - 1:32
    e passar uma lista
    de valores para ele,
  • 1:32 - 1:34
    ele vai criar
    um vetor para mim.
  • 1:35 - 1:39
    Se eu quiser criar
    um segundo vetor, "b",
  • 1:39 - 1:43
    eu também posso
    utilizar o mesmo código.
  • 1:43 - 1:47
    Então, "np.array", vou passar
    uma lista de valores
  • 1:47 - 1:54
    e será criado um array, ou um vetor,
    e associado à variável "vetor_b".
  • 1:55 - 1:58
    Nesse código aqui, vamos
    criar dois vetores, "A" e "B",
  • 1:58 - 2:01
    e vamos printar
    esses vetores.
  • 2:01 - 2:05
    Então, aqui nas respostas,
    vetor A e vetor B,
  • 2:05 - 2:08
    da forma como a gente
    criou anteriormente,
  • 2:08 - 2:10
    e as dimensões do vetor A,
  • 2:10 - 2:13
    por exemplo, o vetor B tem
    a mesma dimensão do vetor A.
  • 2:13 - 2:15
    Então, o que é a dimensão
    de um vetor?
  • 2:15 - 2:18
    São quantos elementos
    tem nesse vetor.
  • 2:18 - 2:22
    Então, esse vetor tem
    três elementos, perfeito?
  • 2:24 - 2:27
    Se eu quiser fazer a soma
    desses dois vetores,
  • 2:27 - 2:31
    eu posso simplesmente vir aqui
    e criar uma variável "soma_vetores",
  • 2:31 - 2:35
    que vai ser igual
    a "vetor_a + vetor_b".
  • 2:35 - 2:38
    E, aqui, eu vou printar
    a soma desses vetores.
  • 2:38 - 2:42
    Então, quando nós somamos dois
    vetores, qual operação é feita?
  • 2:42 - 2:45
    Basicamente, uma soma,
    elemento a elemento,
  • 2:45 - 2:47
    então cada elemento
    do vetor A
  • 2:47 - 2:50
    vai ser somado com o mesmo
    elemento do vetor B,
  • 2:50 - 2:53
    e eu vou ter esse
    resultado aqui na soma.
  • 2:53 - 2:59
    Se eu quiser fazer uma subtração,
    da mesma forma, "vetor_a - vetor_b",
  • 2:59 - 3:03
    e o resultado é uma subtração
    elemento a elemento.
  • 3:03 - 3:07
    Então, eu posso, por exemplo, criar
    uma variável "vetor_multiplicado",
  • 3:07 - 3:13
    que vai ser igual ao vetor_a vezes
    um valor escalar, por exemplo, "2".
  • 3:13 - 3:16
    Essa multiplicação também
    será feita elemento a elemento,
  • 3:16 - 3:19
    então cada elemento do vetor A
    será multiplicado por 2,
  • 3:19 - 3:21
    e aqui a gente tem,
    no nosso código,
  • 3:21 - 3:23
    a resposta desse
    vetor multiplicado.
  • 3:23 - 3:27
    Então, 1 vezes 2,
    2 vezes 2, 3 vezes 2,
  • 3:27 - 3:31
    e a resposta aqui na variável
    "vetor_multiplicado".
  • 3:31 - 3:33
    Uma outra operação
    muito importante,
  • 3:33 - 3:35
    que eu posso fazer
    com dois vetores,
  • 3:35 - 3:37
    se chama "produto escalar".
  • 3:37 - 3:40
    O produto escalar
    entre dois vetores
  • 3:40 - 3:43
    é uma operação onde eu vou
    multiplicar esses dois vetores
  • 3:43 - 3:46
    e o resultado será
    um número escalar.
  • 3:46 - 3:48
    O que esse número
    representa?
  • 3:48 - 3:51
    Esse número representa
    um certo grau de similaridade
  • 3:51 - 3:53
    entre esses dois
    vetores, ou seja,
  • 3:53 - 3:56
    se esses vetores
    estiverem apontando
  • 3:56 - 4:00
    para uma mesma direção,
    esse produto será maior.
  • 4:00 - 4:04
    Se esses produtos estiverem
    perpendiculares um com o outro,
  • 4:04 - 4:08
    ou seja, se tiver um ângulo
    de 90 graus entre eles,
  • 4:08 - 4:12
    esse produto escalar vai
    retornar algo próximo de 0.
  • 4:12 - 4:15
    E se eles estiverem apontando
    para direções opostas,
  • 4:15 - 4:20
    isso significa que esse produto
    escalar terá um valor negativo.
  • 4:20 - 4:23
    Então, basicamente,
    o produto escalar
  • 4:23 - 4:25
    é uma forma de você
    multiplicar dois vetores
  • 4:25 - 4:27
    e obter um escalar
    como resposta,
  • 4:27 - 4:30
    e esse escalar tem
    um certo significado,
  • 4:30 - 4:32
    indica, mais ou menos,
    se esses dois vetores
  • 4:32 - 4:35
    estão apontando
    para direções parecidas.
  • 4:35 - 4:36
    Como eu calculo isso?
  • 4:36 - 4:38
    Por trás dos panos,
    eu estou fazendo
  • 4:38 - 4:42
    linhas de um vetor
    versus colunas do outro.
  • 4:42 - 4:44
    Então, se for necessário,
    por exemplo, nesse caso,
  • 4:44 - 4:47
    a gente tem vetores
    de mesmas dimensões,
  • 4:47 - 4:52
    o segundo vetor vai ser
    transposto, nesse caso.
  • 4:52 - 4:56
    Então, se eu fizer, aqui, o produto
    escalar do vetor A com o vetor B,
  • 4:56 - 4:58
    eu vou ter um número, 32.
  • 4:58 - 5:03
    Esse número indica,
    de certa forma,
  • 5:03 - 5:05
    se esses dois vetores
    estão apontando
  • 5:05 - 5:07
    para direções similares
    ou opostas.
  • 5:07 - 5:09
    Outro conceito
    muito importante
  • 5:09 - 5:11
    quando a gente fala
    de álgebra linear
  • 5:11 - 5:13
    é o conceito de matrizes.
  • 5:13 - 5:17
    Então, diferentemente dos vetores,
    que têm apenas uma dimensão,
  • 5:17 - 5:21
    as matrizes podem ter
    duas dimensões.
  • 5:21 - 5:24
    Então, as matrizes vão
    ter linhas e colunas.
  • 5:24 - 5:27
    Então, serão parecidas
    com uma tabelinha,
  • 5:27 - 5:29
    que teria linhas e colunas.
  • 5:29 - 5:32
    Então, eu posso criar, aqui
    no Python, uma matriz X,
  • 5:32 - 5:34
    usando o "np.array",
  • 5:34 - 5:37
    e, em vez de passar apenas
    uma lista de valores,
  • 5:37 - 5:42
    eu vou passar uma lista
    de listas de valores,
  • 5:42 - 5:46
    onde cada lista vai representar
    uma linha dessa matriz.
  • 5:46 - 5:53
    Essa matriz tem duas linhas,
    essa linha e essa linha,
  • 5:53 - 5:57
    e duas colunas, essa
    coluna e essa coluna.
  • 5:57 - 6:01
    Então, é uma matriz que tem
    dimensões 2 por 2.
  • 6:01 - 6:04
    A matriz Y também é
    uma matriz 2 por 2,
  • 6:04 - 6:09
    porque ela tem duas
    linhas e duas colunas.
  • 6:09 - 6:13
    Se a gente rodar esse código,
    a gente vai ver essas duas matrizes
  • 6:13 - 6:19
    dispostas, aqui, da forma
    que a gente criou elas, perfeito?
  • 6:20 - 6:23
    As operações que a gente
    pode fazer com as matrizes
  • 6:23 - 6:27
    são muito similares às operações
    que a gente pode fazer
  • 6:27 - 6:29
    com os vetores.
  • 6:29 - 6:33
    Então, eu posso olhar
    para o shape dessa matriz,
  • 6:33 - 6:35
    vai me dar
    as dimensões dela,
  • 6:35 - 6:37
    então quais são
    as dimensões dessa matriz?
  • 6:37 - 6:39
    No vetor, a gente tinha
    apenas uma dimensão,
  • 6:39 - 6:42
    então a gente criou
    um vetor de três posições.
  • 6:42 - 6:47
    Aqui, eu tenho duas dimensões,
    eu tenho linhas e colunas,
  • 6:47 - 6:50
    então cada uma das nossas matrizes
    tem duas linhas e duas colunas.
  • 6:50 - 6:55
    Isso, a gente consegue saber usando
    o atributo "shape" da nossa matriz.
  • 6:57 - 6:59
    Da mesma forma
    como vetores,
  • 6:59 - 7:01
    como a gente fez
    para os nossos vetores,
  • 7:01 - 7:03
    a gente pode somar matrizes.
  • 7:03 - 7:07
    Então, quando eu somo
    a matriz X com a matriz Y,
  • 7:07 - 7:10
    eu estou fazendo a mesma operação
    que a gente fez para os vetores,
  • 7:10 - 7:12
    então eu estou somando,
    elemento a elemento,
  • 7:12 - 7:15
    os valores das duas matrizes.
  • 7:15 - 7:18
    Então, se a gente fizer
    a soma e printar essa soma,
  • 7:18 - 7:21
    a gente vai ter o resultado,
    que é a soma das duas matrizes,
  • 7:21 - 7:23
    elemento a elemento.
  • 7:23 - 7:24
    Da mesma forma,
  • 7:24 - 7:27
    se a gente fizer a subtração
    entre essas duas matrizes,
  • 7:27 - 7:31
    eu também vou ter o resultado
  • 7:31 - 7:36
    como sendo uma matriz resultante
    de mesma dimensão, 2 por 2,
  • 7:36 - 7:40
    onde cada valor é a subtração,
    elemento a elemento,
  • 7:40 - 7:43
    dessas duas matrizes.
  • 7:43 - 7:48
    Por fim, eu posso multiplicar
    essa matriz, ou alguma matriz,
  • 7:48 - 7:49
    por um valor escalar,
  • 7:49 - 7:52
    e aí, eu também terei uma resposta
  • 7:52 - 7:56
    que vai ser a multiplicação desse
    escalar, por exemplo, o valor "3",
  • 7:56 - 7:58
    por cada elemento
    dessa matriz.
  • 7:58 - 8:02
    Então, o resultado também
    é uma matriz 2 por 2,
  • 8:02 - 8:05
    e essa matriz 2 por 2,
    cada elemento dela
  • 8:05 - 8:11
    é o resultado da multiplicação
    desse escalar pelo valor da matriz.
  • 8:12 - 8:17
    Da mesma forma que fizemos
    o produto escalar para vetores,
  • 8:17 - 8:19
    podemos, também,
    aplicar para matrizes,
  • 8:19 - 8:21
    porém, com uma pequena
    diferença.
  • 8:21 - 8:25
    Nos vetores, temos
    apenas uma dimensão,
  • 8:25 - 8:29
    nas matrizes, a gente
    tem duas dimensões.
  • 8:29 - 8:32
    Então, se eu criar
    uma matriz, por exemplo,
  • 8:32 - 8:35
    chamada "matriz_a_mult",
  • 8:35 - 8:39
    como uma matriz que vai ter
    duas linhas e três colunas,
  • 8:39 - 8:44
    eu utilizaria esse código
    aqui para criá-la.
  • 8:44 - 8:46
    Poderia criar, também,
    uma "matriz_b_mult",
  • 8:46 - 8:50
    essa matriz em vez de ter
    duas linhas por três colunas,
  • 8:50 - 8:53
    vai ter três linhas
    por duas colunas.
  • 8:54 - 8:56
    Então, se a gente rodar
    esse código aqui,
  • 8:56 - 8:58
    a gente pode ver, aqui,
    as nossas duas matrizes.
  • 8:58 - 9:04
    Uma tem dimensões 2 por 3,
    uma tem dimensões 3 por 2.
  • 9:04 - 9:07
    Para fazer o produto escalar
    dessas duas matrizes,
  • 9:07 - 9:10
    eu posso utilizar o mesmo
    código do NumPy,
  • 9:10 - 9:12
    a mesma função,
    o mesmo método,
  • 9:12 - 9:15
    "np.dot", "matriz_a_mult"
    e "matriz_b_mult",
  • 9:15 - 9:19
    e eu vou ter o resultado
    dessa multiplicação.
  • 9:19 - 9:22
    Note que o resultado
    dessa multiplicação
  • 9:22 - 9:25
    é uma matriz de 2 por 2.
  • 9:25 - 9:27
    Então, existe uma regrinha
  • 9:27 - 9:32
    para a gente fazer multiplicação
    matricial através do produto escalar
  • 9:32 - 9:36
    e essa multiplicação
    ser possível.
  • 9:36 - 9:38
    Qual seria essa regra?
  • 9:38 - 9:44
    As dimensões da minha matriz A,
    a quantidade de colunas dela
  • 9:44 - 9:48
    tem que ser igual à quantidade
    de linhas da matriz B.
  • 9:48 - 9:50
    Então, sempre que eu estiver
    fazendo o produto escalar
  • 9:50 - 9:51
    entre duas matrizes,
  • 9:51 - 9:54
    a quantidade
    de colunas da primeira
  • 9:54 - 9:58
    tem que ser igual à quantidade
    de linhas da segunda.
  • 9:58 - 10:03
    E o resultado sempre será
    a quantidade de linhas da primeira
  • 10:03 - 10:06
    por a quantidade
    de colunas da segunda.
  • 10:06 - 10:11
    Então, essas duas matrizes,
    eu posso multiplicar, por quê?
  • 10:11 - 10:13
    Porque elas obedecem
    o primeiro quesito,
  • 10:13 - 10:17
    a quantidade de colunas
    da matriz A
  • 10:17 - 10:20
    é igual à quantidade
    de linhas da matriz B.
  • 10:20 - 10:23
    E o resultado dessa conta
    desse produto escalar
  • 10:23 - 10:28
    vai dar a quantidade
    de linhas da matriz A
  • 10:28 - 10:32
    pela quantidade de colunas
    da matriz B, que vai dar 2 por 2.
  • 10:32 - 10:35
    Então, se a gente pudesse
    fixar um pouco essa regra,
  • 10:35 - 10:37
    você poderia pensar assim:
  • 10:37 - 10:40
    quando eu for multiplicar
    duas matrizes,
  • 10:40 - 10:46
    fazer o produto escalar delas,
    os valores de dentro, ou seja,
  • 10:46 - 10:49
    a quantidade de colunas da primeira
    e de linhas da segunda
  • 10:49 - 10:51
    tem que ser igual,
  • 10:51 - 10:53
    e o resultado vai dar
    os dois de fora, ou seja,
  • 10:53 - 10:55
    a quantidade de linhas
    da primeira
  • 10:55 - 10:58
    e a quantidade
    de colunas da segunda.
  • 10:58 - 11:01
    Então, seguindo aqui,
    vamos passar, agora,
  • 11:01 - 11:06
    por outras operações relevantes
    no nosso contexto de álgebra linear.
  • 11:06 - 11:09
    Um conceito mega importante,
    uma operação mega importante
  • 11:09 - 11:11
    é inverter uma matriz.
  • 11:11 - 11:16
    Para inverter uma matriz, qualquer
    matriz tem que ser quadrada,
  • 11:16 - 11:18
    como a que a gente
    está criando aqui,
  • 11:18 - 11:24
    "matriz_quadrada = np.array",
    uma matriz de 2 por 2.
  • 11:24 - 11:26
    Então, o que é
    uma matriz quadrada?
  • 11:26 - 11:29
    Mesma quantidade de linhas é
    a mesma quantidade de colunas.
  • 11:29 - 11:31
    E ela precisa ser não singular.
  • 11:31 - 11:37
    Ser não singular significa que
    o determinante dela não pode ser 0.
  • 11:37 - 11:42
    Então, basicamente, inverter
    uma matriz, no Python,
  • 11:42 - 11:47
    a gente pode fazer utilizando
    o módulo do NumPy de linear algebra,
  • 11:47 - 11:50
    então "np.linalg",
  • 11:50 - 11:54
    e do linalg, eu vou usar
    o método "inv", de inverter.
  • 11:54 - 11:57
    Então, vou criar uma variável
    matriz inversa
  • 11:57 - 11:59
    e vou atribuir
    para ela a inversa,
  • 11:59 - 12:03
    o cálculo da inversa dessa matriz
    quadrada que a gente criou.
  • 12:03 - 12:07
    Quando a gente inverte
    uma matriz, o que significa?
  • 12:07 - 12:10
    É como se eu estivesse
    fazendo um cálculo análogo
  • 12:10 - 12:14
    a "1" sobre um determinado
    número, esse é o inverso dela.
  • 12:14 - 12:17
    Então, "1" sobre essa matriz
    é a mesma coisa
  • 12:17 - 12:20
    que a inversa
    dessa matriz, perfeito?
  • 12:20 - 12:22
    Então, se a gente
    rodar esse código,
  • 12:22 - 12:25
    a gente vai ver, aqui, a matriz
    quadrada que a gente tinha criado
  • 12:25 - 12:29
    e aqui é a inversa
    dessa matriz quadrada.
  • 12:29 - 12:32
    Ela é uma matriz quadrada,
    então ela pode ser invertível
  • 12:32 - 12:35
    e ela é não singular, então ela
    pode ser invertível também,
  • 12:35 - 12:38
    tem que obedecer esses
    dois critérios aí, perfeito?
  • 12:38 - 12:41
    E aí, a gente pode,
    depois, no nosso código
  • 12:41 - 12:45
    verificar essa inversão
    dessa matriz.
  • 12:45 - 12:47
    Como eu poderia
    fazer isso?
  • 12:47 - 12:51
    Se eu fizer o produto escalar
    da matriz original com a sua inversa,
  • 12:51 - 12:56
    eu tenho que ter como resultado
    a matriz identidade, ou seja,
  • 12:56 - 12:59
    a matriz identidade
    no contexto de álgebra
  • 12:59 - 13:00
    é como se fosse o valor 1.
  • 13:00 - 13:03
    Então, é como se eu multiplicasse
    a matriz por "1" sobre a matriz,
  • 13:03 - 13:08
    eu vou ter "1" como resposta, é isso
    que quer dizer esse código aqui.
  • 13:10 - 13:12
    Seguindo no nosso código,
  • 13:12 - 13:14
    como a gente falou
    de determinante da matriz,
  • 13:14 - 13:16
    a gente pode verificar, aqui,
  • 13:16 - 13:19
    como calcular o determinante
    de uma matriz.
  • 13:19 - 13:22
    Então, vou criar,
    aqui, uma matriz
  • 13:22 - 13:25
    para a gente calcular
    o determinante com base nela
  • 13:25 - 13:30
    e eu vou utilizar o mesmo módulo
    de linear algebra do NumPy,
  • 13:30 - 13:33
    só que eu vou usar, agora,
    o método "det", de determinante.
  • 13:33 - 13:36
    Então, qual é o determinante
    dessa matriz?
  • 13:36 - 13:38
    Se a gente rodar
    esse código,
  • 13:38 - 13:42
    a gente vai ver que o determinante
    dessa matriz é "4.99".
  • 13:43 - 13:46
    Se eu tiver
    uma matriz singular,
  • 13:46 - 13:47
    o que significa
    uma matriz singular?
  • 13:47 - 13:50
    Significa que é uma matriz
    cujo determinante é 0.
  • 13:50 - 13:55
    Se o determinante dela é 0, eu
    não consigo inverter essa matriz.
  • 13:55 - 13:58
    Então, essa matriz
    singular que a gente criou
  • 13:58 - 14:03
    mais embaixo do nosso código é
    uma matriz que não teria inversa,
  • 14:03 - 14:08
    não seria possível calcular
    a inversa dessa matriz, perfeito?
  • 14:08 - 14:12
    Outra operação extremamente
    importante é a norma de um vetor.
  • 14:12 - 14:17
    Então, a norma de um vetor
    é como a gente calcula,
  • 14:17 - 14:20
    de certa forma,
    o tamanho desse vetor.
  • 14:20 - 14:22
    Então, a norma desse vetor...
  • 14:22 - 14:26
    Existem várias formas de se
    calcular a norma de um vetor.
  • 14:26 - 14:30
    A mais conhecida e a mais
    utilizada é a norma L2,
  • 14:30 - 14:33
    que é também conhecida
    como a norma Euclidiana.
  • 14:33 - 14:35
    Então, ela é dada
    por essa continha aqui,
  • 14:35 - 14:41
    então vai ser a raiz quadrada
    da soma dos valores dessa matriz,
  • 14:41 - 14:43
    desse vetor, ao quadrado,
  • 14:43 - 14:45
    então a raiz quadrada da soma
  • 14:45 - 14:49
    dos quadrados dos valores
    dessa matriz, perfeito?
  • 14:49 - 14:52
    Então, se a gente tiver
    uma matriz 3 e -4,
  • 14:52 - 14:56
    a norma Euclidiana
    dessa matriz vai ser 5.
  • 14:56 - 14:58
    Como eu chego
    nesse cálculo?
  • 14:58 - 15:02
    Fazendo a raiz quadrada
    da soma dos quadrados
  • 15:02 - 15:05
    dos valores desse
    vetor, perfeito?
  • 15:05 - 15:09
    Bom, então, para calcular
    a norma Euclidiana,
  • 15:09 - 15:13
    eu posso usar o módulo
    de álgebra linear do NumPy,
  • 15:13 - 15:16
    utilizando o método
    "norm", certo?
  • 15:16 - 15:18
    E eu vou ter a norma
    Euclidiana.
  • 15:18 - 15:23
    Existem, também, outras formas
    de normas que a gente pode utilizar,
  • 15:23 - 15:26
    por exemplo, a norma
    de Frobenius.
  • 15:26 - 15:28
    Não é uma norma
    muito utilizada,
  • 15:28 - 15:33
    mas apenas para a gente conseguir
    visualizar que existe um parâmetro,
  • 15:33 - 15:37
    eu posso parametrizar o tipo
    de norma que eu quero
  • 15:37 - 15:40
    na função, no método
    "norm" do NumPy.
  • 15:40 - 15:45
    Então, por padrão, essa biblioteca
    já utiliza a norma Euclidiana,
  • 15:45 - 15:49
    mas eu poderia definir outra
    dentre as normas possíveis,
  • 15:49 - 15:51
    e, para saber
    as normas possíveis,
  • 15:51 - 15:55
    a gente pode olhar na documentação
    dessa biblioteca, perfeito?
  • 15:57 - 16:04
    Outro cálculo muito interessante,
    muito importante para criar IAs
  • 16:04 - 16:07
    e para a álgebra linear
    como um todo,
  • 16:07 - 16:09
    é você calcular
    distâncias entre vetores.
  • 16:09 - 16:11
    Então, eu posso
    ter dois vetores
  • 16:11 - 16:15
    e eu quero calcular o quão
    distantes esses vetores são.
  • 16:16 - 16:18
    Para fazer a distância
    entre vetores,
  • 16:18 - 16:22
    eu posso, simplesmente,
    calcular a diferença entre eles.
  • 16:22 - 16:24
    Então, se eu calcular
    a diferença entre eles,
  • 16:24 - 16:25
    eu vou ter um
    menos o outro,
  • 16:25 - 16:29
    eu vou ter a distância de cada
    vetor em cada dimensão.
  • 16:31 - 16:35
    Quando eu quero criar, utilizar
    uma distância Euclidiana,
  • 16:35 - 16:36
    o que é a distância Euclidiana?
  • 16:36 - 16:40
    É uma distância baseada
    na norma Euclidiana,
  • 16:40 - 16:42
    então vai ser a norma L2,
  • 16:42 - 16:46
    a norma Euclidiana da diferença
    entre os dois vetores,
  • 16:46 - 16:51
    então eu vou fazer a raiz quadrada
    das diferenças elevada ao quadrado,
  • 16:51 - 16:53
    essa que é a conta.
  • 16:53 - 16:57
    No Python, eu poderia,
    simplesmente, fazer a norma
  • 16:57 - 17:01
    das diferenças dos vetores
    que a gente calculou aqui.
  • 17:01 - 17:05
    E, aqui, eu coloco a ordem 2,
    a ordem já é presumida que é o 2,
  • 17:05 - 17:06
    por default,
  • 17:06 - 17:08
    e aí, a gente tem, aqui,
  • 17:08 - 17:11
    o que a gente chama de distância
    Euclidiana entre dois vetores,
  • 17:11 - 17:16
    o quão distantes esses
    dois vetores estão, certo?
  • 17:16 - 17:20
    Outra métrica bastante interessante
    para se calcular entre dois vetores
  • 17:20 - 17:22
    é a distância de Manhattan.
  • 17:22 - 17:24
    Então, a única diferença
    entre a distância Euclidiana
  • 17:24 - 17:28
    e a distância de Manhattan
    é a ordem dessa norma.
  • 17:28 - 17:30
    Então, uma a gente
    chama de norma L2,
  • 17:30 - 17:32
    a distância Euclidiana,
  • 17:32 - 17:34
    a distância de Manhattan,
    a gente chama de L1,
  • 17:34 - 17:38
    tudo por causa da norma,
    da ordem da norma.
  • 17:38 - 17:40
    O que isso muda
    na prática?
  • 17:40 - 17:41
    Na norma Euclidiana,
  • 17:41 - 17:45
    isso muda que a gente usa
    o quadrado das diferenças.
  • 17:45 - 17:48
    Na norma de Manhattan,
    na distância de Manhattan,
  • 17:48 - 17:51
    norma L1, a gente
    usa o módulo,
  • 17:51 - 17:53
    como se estivesse
    usando uma ordem 1,
  • 17:53 - 17:58
    elevado a 1, esse número, então
    a gente usa a norma dos valores.
  • 17:58 - 18:01
    Então, se a gente verificar aqui,
    a gente vai ter diferentes normas
  • 18:01 - 18:05
    e cada norma dessa vai ser
    mais útil ou menos útil
  • 18:05 - 18:07
    dependendo do caso
    de uso que a gente tiver.
  • 18:09 - 18:13
    Outras operações úteis aqui
    no contexto de álgebra linear:
  • 18:13 - 18:16
    a gente pode transpor uma matriz,
    então, frequentemente,
  • 18:16 - 18:19
    a gente vai ter que calcular
    a transposta de uma matriz.
  • 18:19 - 18:21
    O que é a transposta
    de uma matriz?
  • 18:21 - 18:24
    É simplesmente eu transformar
    o que era linha em coluna
  • 18:24 - 18:26
    e o que era coluna em linha.
  • 18:26 - 18:30
    Então, se eu criar uma matriz
    3 por 2 com esses valores,
  • 18:30 - 18:31
    com esses elementos,
  • 18:31 - 18:35
    a transposta dessa matriz
    original vai ser, simplesmente,
  • 18:35 - 18:39
    essa matriz transposta, ou seja,
    linhas vão virar colunas
  • 18:39 - 18:41
    e colunas vão virar linhas,
  • 18:41 - 18:46
    então, no final,
    a dimensão dessa matriz
  • 18:46 - 18:49
    vai de 3 por 2
    para 2 por 3.
  • 18:49 - 18:51
    Então, vamos rodar
    esse código para visualizar.
  • 18:51 - 18:54
    Eu tinha uma matriz
    original 3 por 2,
  • 18:54 - 18:58
    a matriz transposta
    vai ser 2 por 3.
  • 18:59 - 19:02
    Outro conceito interessante é
    você criar uma matriz identidade.
  • 19:02 - 19:07
    Então, a matriz identidade é
    uma matriz similar a um número 1,
  • 19:07 - 19:11
    então aquela matriz que, se você
    multiplicar uma matriz por ela,
  • 19:11 - 19:14
    é como se você estivesse
    multiplicando um número por 1,
  • 19:14 - 19:16
    então vai dar ela mesma.
  • 19:16 - 19:19
    Então, a matriz identidade
    no Python, utilizando o NumPy,
  • 19:19 - 19:23
    a gente usa a função "eye".
  • 19:23 - 19:26
    Se eu colocar aqui,
    como entrada, 2,
  • 19:26 - 19:30
    eu vou ter uma matriz
    identidade 2 por 2,
  • 19:30 - 19:34
    se eu colocar 3, eu vou ter
    uma matriz identidade 3 por 3.
  • 19:34 - 19:38
    Então, matriz identidade sempre
    são matrizes quadradas, ou seja,
  • 19:38 - 19:40
    mesmo número
    de linhas e de colunas.
  • 19:40 - 19:42
    Então, se a gente rodar aqui,
  • 19:42 - 19:47
    a gente vai ter a matriz
    identidade, ela é 2 por 2,
  • 19:47 - 19:50
    vou ter a matriz transposta,
  • 19:50 - 19:56
    e, se eu multiplicar uma matriz
    por sua identidade,
  • 19:56 - 19:58
    se eu fizer o produto
    escalar entre eles,
  • 19:58 - 20:04
    eu vou ter como resultado
    a mesma matriz original, certo?
  • 20:04 - 20:11
    Olha, "[1. 2.] [3. 4.]", resposta
    "[1. 2.] [3. 4.]", perfeito?
  • 20:11 - 20:15
    Agora, algumas funções auxiliares
    que o NumPy oferece para a gente:
  • 20:15 - 20:18
    então o NumPy oferece,
    por exemplo,
  • 20:18 - 20:20
    uma funçãozinha
    que é interessante
  • 20:20 - 20:23
    para o que a gente vai
    fazer durante as aulas,
  • 20:23 - 20:27
    que se chama "linspace",
    o que esse linspace faz?
  • 20:27 - 20:33
    Ele simplesmente cria pontos
    linearmente, igualmente espaçados,
  • 20:33 - 20:34
    vamos dizer assim.
  • 20:34 - 20:37
    Então, o que essa funçãozinha
    aqui está fazendo?
  • 20:37 - 20:42
    Eu vou criar 5 pontos
    entre 0 e 10,
  • 20:42 - 20:45
    e esses pontos vão ser
    linearmente espaçados,
  • 20:45 - 20:50
    então 0, 2.5, 5, 7.5, 10.
  • 20:50 - 20:53
    Tenho 5 pontos e a distância
    entre eles é igual.
  • 20:56 - 20:58
    Outras funções auxiliares:
  • 20:58 - 21:01
    eu posso criar uma matriz
    só com zeros no Python,
  • 21:01 - 21:05
    utilizando a função
    "np.zeros".
  • 21:05 - 21:07
    E, aqui, eu posso passar
    como entrada,
  • 21:07 - 21:08
    como parâmetro
    para essa função,
  • 21:08 - 21:11
    a dimensão da matriz
    que eu quero criar.
  • 21:11 - 21:13
    Então, eu vou criar
    uma matriz de zeros
  • 21:13 - 21:16
    com dimensões
    de 2 linhas e 3 colunas.
  • 21:16 - 21:19
    Da mesma forma, eu posso criar
    uma matriz de números uns,
  • 21:19 - 21:22
    utilizando o "np.ones".
  • 21:22 - 21:26
    Vou passar aqui, eu quero criar
    uma matriz de 3 linhas e 2 colunas
  • 21:26 - 21:28
    só com números uns.
  • 21:28 - 21:32
    Então, está aqui a nossa matriz
    de zeros e a nossa matriz de uns.
  • 21:33 - 21:38
    E a gente pode, também,
    concatenar esses vetores,
  • 21:38 - 21:42
    ou seja, eu posso juntar dois
    vetores, ou juntar duas matrizes.
  • 21:42 - 21:49
    Então, aqui, por exemplo, eu tenho
    uma matriz chamada "array1"
  • 21:49 - 21:55
    e essa matriz é "np.array",
    primeira linha, segunda linha,
  • 21:55 - 21:57
    cada uma com duas colunas.
  • 21:57 - 22:00
    E eu posso ter um vetor,
    uma matriz que, na verdade,
  • 22:00 - 22:06
    aqui, vai ter uma linha só,
    uma linha e duas colunas.
  • 22:06 - 22:12
    Então, se eu concatenar esses dois
    arrays aqui, esses dois vetores,
  • 22:12 - 22:15
    essas duas matrizes,
    aqui no caso,
  • 22:15 - 22:19
    eu vou ter, na verdade,
    no final, uma matriz,
  • 22:19 - 22:22
    esse array concatenado
    vai adicionar essa linha
  • 22:22 - 22:24
    nesse vetor original
    que tinha só duas linhas.
  • 22:24 - 22:27
    Então, eu vou ter um vetor
    de 3 linhas e 2 colunas,
  • 22:27 - 22:30
    uma matriz, no caso,
    de 3 linhas e 2 colunas.
  • 22:32 - 22:35
    Esse parâmetro aqui,
    "axis", significa:
  • 22:35 - 22:38
    quando é 0, eu vou
    adicionar nas linhas,
  • 22:38 - 22:41
    quando são colunas, eu
    vou adicionar nas colunas,
  • 22:41 - 22:44
    então um eu vou adicionar embaixo,
    o outro eu vou adicionar ao lado,
  • 22:44 - 22:46
    é como se fosse isso.
  • 22:47 - 22:50
    Então, aqui, eu tenho um exemplo
    tanto adicionando linhas
  • 22:50 - 22:51
    a uma matriz original,
  • 22:51 - 22:54
    quanto adicionando colunas
    a uma matriz original.
  • 22:54 - 22:56
    Então, se a gente
    rodar esse exemplo,
  • 22:56 - 22:59
    eu tenho a matriz 1,
    2 por 2,
  • 22:59 - 23:04
    e a matriz 2, que é uma linha
    por duas colunas.
  • 23:04 - 23:08
    Quando eu concateno elas
    utilizando o eixo 0, o axis 0,
  • 23:08 - 23:10
    eu vou adicionar
    uma linha a mais.
  • 23:10 - 23:12
    No outro exemplo,
    no debaixo,
  • 23:12 - 23:20
    eu tenho uma matriz
    de duas linhas e uma coluna,
  • 23:20 - 23:24
    e eu vou concatenar
    um array nas colunas,
  • 23:24 - 23:27
    então eu vou adicionar
    duas colunas diferentes.
  • 23:27 - 23:33
    Então, eu continuo com o 7 e 8,
    vou adicionar o 1, 3, 2, 4 aqui,
  • 23:33 - 23:37
    como colunas novas
    nessa matriz original.
  • 23:39 - 23:42
    E, por último,
    para fechar o nosso lab,
  • 23:42 - 23:45
    eu também posso utilizar uma função
    de reshape nos meus dados,
  • 23:45 - 23:48
    nos meus arrays, nos meus
    vetores e matrizes.
  • 23:48 - 23:50
    O que o reshape vai fazer?
  • 23:50 - 23:55
    Eu consigo alterar o formato
    dessa matriz ou desse array.
  • 23:55 - 23:59
    Então, imagina que eu tenho
    uma matriz, um array, na verdade,
  • 23:59 - 24:02
    que eu tenho 6 elementos
    nesse array.
  • 24:02 - 24:07
    Eu posso fazer um reshape
    nesse dado, nessa matriz,
  • 24:07 - 24:11
    e transformá-lo em uma matriz
    de duas linhas e três colunas.
  • 24:13 - 24:16
    O único ponto importante
    para a gente pensar é:
  • 24:16 - 24:18
    no final, essa conta
    tem que fechar,
  • 24:18 - 24:23
    então, se eu tenho 6 colunas,
    6 números, 6 elementos nesse vetor,
  • 24:23 - 24:26
    e eu quero transformá-lo
    em uma matriz,
  • 24:26 - 24:28
    as dimensões, aqui,
    têm que multiplicar
  • 24:28 - 24:33
    e dar o mesmo resultado
    que a quantidade de elementos
  • 24:33 - 24:35
    desse vetor original.
  • 24:35 - 24:38
    Então, se eu tenho 6 elementos,
    2 vezes 3 tem que dar 6.
  • 24:38 - 24:41
    Eu poderia, também,
    fazer 3 por 2, ou 6 por 1,
  • 24:41 - 24:45
    mas eu não poderia fazer
    2 por 4, porque daria erro.
  • 24:45 - 24:48
    Então, se a gente rodar
    aqui, tem o array original,
  • 24:48 - 24:52
    e esse array, quando eu fizer
    o reshape de 2 por 3 dele,
  • 24:52 - 24:55
    ele vai reajustar
    esses elementos
  • 24:55 - 24:57
    em uma matriz de duas
    linhas e três colunas.
  • 24:57 - 25:00
    Se eu colocasse
    "4" aqui, daria erro.
  • 25:00 - 25:02
    Por que daria erro?
  • 25:02 - 25:04
    Porque eu só tenho
    6 elementos,
  • 25:04 - 25:08
    para fazer um reshape de 2 e 4,
    eu teria que ter 8 elementos.
  • 25:08 - 25:12
    Então, o único ponto
    de atenção seria esse.
  • 25:13 - 25:17
    Então, agora você já sabe
    muito sobre IA generativa
  • 25:17 - 25:21
    e já deu os seus primeiros
    passos sobre álgebra linear
  • 25:21 - 25:24
    para conseguir,
    você mesmo,
  • 25:24 - 25:27
    implementar os seus próprios
    modelos de IA generativa.
Title:
GAN CAP01 2025 VA05 APLICACAO EM PYTHON
Video Language:
Portuguese, Brazilian
Duration:
25:30

Portuguese, Brazilian subtitles

Revisions Compare revisions