<jupyter_start><jupyter_text>Exercícios Python e NumpyO objetivo desse notebook é ajudar na fixação dos conteúdos que passamos na aula de Python e Numpy. Sabemos que acabamos passando meio rápido durante a aula, então o objetivo aqui é conseguir treinar os conceitos para você conseguir usa-los na prática mais tarde.Qualquer dúvida pode ficar a vontade para perguntar no Slack ou diretamente para gente, vamos ficar felizes em ajudar :)  PythonAqui na parte de Python vamos passar por algumas das principais coisas que você precisa saber, é claro que não colocamos tudo de importante da linguagem, só o mais necessário.  Variáveis<jupyter_code># Declare uma variavel chamada a e atribua o valor 10 a ela
a = 10
# Imprime essa variavel que você acabou de criar
a #print(a)
# Crie uma outra variavel b que recebe o valor de a so que como string
b = '%d' % a
# Combine sua variavel b a variavel abaixo para obter a string "Hello 10" em uma variavel d
c = "Hello "
d = c+b
# Imprima a variável d
d<jupyter_output><empty_output><jupyter_text>Strings<jupyter_code>my_str = 'Insira uma frase aqui!'
# Substitua a exclamação da frase por uma interrogação
# (Dica: A funcão altera inplace ou retorna uma copia modificada?)
my_str.replace('!', '?', 1)
# Crie uma lista "my_words" com cada palavra a frase
my_words = my_str.split(' ')
my_words<jupyter_output><empty_output><jupyter_text>Listas<jupyter_code>lista = [1, 23, 31, 40, 56, 16]
# Faça um for que imprima cada elemento da lista "lista" (Lembre-se que o for em python é um for each)
for el in lista:
    print(el)
# Faça um for que imprima o dobro de cada elemento da lista "lista" 
for el in lista:
    print(el*2)
# Gere uma lista chamada "dobro" com o dobro de cada elemento de "lista" usando list comprehension
dobro = [el*2 for el in lista]
dobro
# Crie uma nova lista chamada "pares"
# Faça um for que itere sobre a lista "lista" e para cada elemento impar coloque ele no fim da lista "pares"
# Imprima a lista "pares"
pares = [el for el in lista if el%2 != 0 ]
pares
lista2 = ['oi', 2, 2.5, 'top', 'python', 45]
# Faça um for pela "lista2" e imprima todos os elementos que são strings (Dica: pesquise pela função type())
[el for el in lista2 if type(el) == str]<jupyter_output><empty_output><jupyter_text>Indexando<jupyter_code>my_list = [0, 10, 20, 30, 40, 50, 60, 70]
# Selecione o ultimo elemento da lista
my_list[-1]
# Selecione do primeiro até o 4 elemento da lista
my_list[0:4]
# Selecione do segundo elemento da lista até o quinto
my_list[1:5]
# Selecione do primeiro elemento da lista até o penultimo
my_list[:-1]<jupyter_output><empty_output><jupyter_text>Dicionários<jupyter_code>lista = ['a', 'a', 'b', 'a', 'c', 'd', 'e', 'b', 'b', 'c']
# Crie um dicionario que contenha a contagem de cada elemento do vetor
my_dict = {el:0 for el in lista}
for el in lista:
    my_dict[el] += 1
#...
print(my_dict)<jupyter_output>{'a': 3, 'b': 3, 'c': 2, 'd': 1, 'e': 1}<jupyter_text>Funções<jupyter_code># Crie uma função soma_elementos() que recebe uma lista e retorna a soma de todos os seus elementos
def soma_elementos(lista):
    return sum(lista)
soma_elementos([1, 2, 3, 4, 5])
soma_elementos([-1, 5, 7, -2])
# Crie uma função produto_escalar() que recebe duas listas de tamanho igual e calcula o produto escalar entre elas
# Dica: Utilize a função zip
def produto_escalar(lista1, lista2):
    result = 0
    for a, b in zip(lista1, lista2):
        result += a*b
    return result
produto_escalar([1, 2, 3], [0, 4, 7])
produto_escalar([10, 20, 40, 1], [23, 4, 2, 1])
# Crie uma função par_ou_impar() que recebe um numero n é para cada numero de 1 a n imprime o numero
# seguido de par ou impar, dependendo do que ele seja. Caso o usuário não coloque nada n deve valer 20
# Exemplo: par_ou_impar(4)
#   1 Impar
#   2 Par
#   3 Impar
#   4 Par
def par_ou_impar(n=20):
    for i in range(1, n+1):
        if i%2 == 0:
            print('%d Par' % i)
        else:
            print('%d Impar' % i)
par_ou_impar(4)
par_ou_impar(15)
# Crie uma função diga_indice() que recebe uma lista e imprime o indice de cada elemento e em seguida 
# o proprio elemento
# Exemplo: diga_indice(['oi', 'tudo', 'bem'])
#    0 oi
#    1 tudo
#    2 bem
# (DICA: Pesquise pela função enumerate)
def diga_indice(lista):
    for idx, val in enumerate(lista):
        print(idx, val)
diga_indice(['1', '2', '3'])
diga_indice(['a', 'b', 'c', 'd', 'e'])<jupyter_output>0 a
1 b
2 c
3 d
4 e<jupyter_text>NumpyO elemento central do numpy são os arrays, então aqui vamos treinar muitas coisas sobre eles<jupyter_code># Importando a biblioteca
import numpy as np<jupyter_output><empty_output><jupyter_text>Arrays<jupyter_code>a = np.array([1, 2, 3, 4, 5, 6, 7])

b = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8]])

c = np.zeros((3,4))
# Pense em qual é a shape de cada um dos arrays acima
# Depois de pensar imprima cada um deles para conferir sua resposta
print(a.shape)
print(b.shape)
print(c.shape)
# Crie um array de uma dimenção com 20 elementos inteiros aletórios entre 0 e 23bb
np.random.rand(20)
# Crie um array de uns com shape (4, 5)
np.zeros([4, 5])
# Crie um array shape (4, 2) onde cada entrada vale 77
# (Dica: Talvez vc tenha que usar uma multiplicação)
np.ones([4, 2]) * 77
# Gere um array chamado my_sequence com os numeros 0, 10, 20, 30, ..., 90, 100]
np.arange(0, 101, 10)<jupyter_output><empty_output><jupyter_text>Indexando<jupyter_code>my_array = np.random.randint(50, size=(15,))
print(my_array)
# Selecione todos os elementos entre o quinto e o decimo primeiro (intervalo fechado)
my_array[4:10]
# Selecione todos os elementos maiores que 20
my_array[my_array > 20]
my_matrix = np.array([[1, 2, 3, 4],
                      [5, 6, 7, 8],
                      [9, 10, 11, 12],
                      [13, 14, 15, 16]])
# Selecione o elemento na primeira linha da terceira coluna
my_matrix[0][2]
# Selecione o elemento na primeira linha da ultima coluna
my_matrix[0][-1]
# Selecione os elementos da matriz para obter o seguinte
# [[6, 7],
#  [10, 11]]
my_matrix[1:3, 1:3]
# Selecione os elementos da matriz para obter o seguinte
# [[2, 3, 4],
#  [6, 7, 8]]
my_matrix[0:2, -3:]
# Selecione os elementos da ultima coluna inteira
my_matrix[:, [-1]]
# Selecione os elementos da 2a linha inteira
my_matrix[1]<jupyter_output><empty_output><jupyter_text>Operações<jupyter_code>my_array = np.random.randint(10, size=(5,))
print(my_array)
# Some 10 a todos os elementos de my_array
my_array + 10
# Multiplique todos os elementos de my_array por 4
my_array * 4
# Obtenha a soma de todos os elementos de my_array
my_array.sum()
# Obtenha a média de todos os elementos de my_array
my_array.mean()
# Obtenha o indice do maior elemento de my_array
my_array.max()
my_array = np.random.randint(10, size=(5,))
my_other_array = np.random.randint(10, size=(5,))
print(my_array, '\n')
print(my_other_array)
my_array = np.random.randint(10, size=(5,))
my_other_array = np.random.randint(10, size=(10,5))
print(my_array, '\n')
print(my_other_array)
# Some my_array elemento por elemento em cada linha de my_other_array
my_array = np.random.randint(10, size=(5,4))
my_other_array = np.random.randint(10, size=(10,5))
print(my_array, '\n')
print(my_other_array)
# Faça a multiplicação entre my_other_array e my_array
# Descubra a soma dos valores de cada linha de my_other_array
# (Dica: Pesquise sobre o atributo axis da função de soma)
my_array = np.random.randint(10, size=(5,4))
print(my_array)
# Usando reshape transforme a matriz acima em um vetor (Concatendo a linha de baixo na de cima)

np.array([[ 0,  1,  2,  3,  4,  5,  6,  7],
          [ 8,  9, 10, 11, 12, 13, 14, 15]])
# Gere a array anterior usando np.arange e a função reshape
a = np.arange(16)
a.reshape([2,-1])<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11185740118832344, 'fraction_numerical': 0.03810384913459054, 'mean_word_length': 4.33631977946244, 'pattern_counts': {'":': 0, '<': 39, '<?xml version=': 0, '>': 40, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '146266', 'license': 'MIT', 'n_tokens_mistral': 3212, 'n_tokens_neox': 3040, 'n_words': 1059, 'path': 'Aula0/homework.ipynb', 'repo_name': 'leomaurodesenv/Intro-DS-2020.1', 'size': '7742'}