import numpy as np
# Criando um array simples de 1 dimensão (vetor)
arr_1 = np.array([1, 2, 3, 4, 5])
print(arr_1)
print(type(arr_1))
# Verificando o tipo de dados do array
print(arr_1.dtype)
arr_2 = np.array(["1", "2", "3"])
print(arr_2.dtype)
# Definindo um tipo de dado ao criar o array
# Passando um array de int e criando um np array como float
arr_3 = np.array([1, 2, 3, 4, 5], dtype = float)
print(arr_3)
print(arr_3.dtype)
# Passando um array de int e criando um np array como str
arr_4 = np.array([1, 2, 3, 4, 5], dtype = str)
print(arr_4)
print(arr_4.dtype)
# Precedência de tipos: str > float > int > bool
arr_multi = np.array(['1', 2, 3.0, False])
print(arr_multi)
print(arr_multi.dtype)
arr_multi_2 = np.array([1, 2, 3.0, False, True])
print(arr_multi_2)
print(arr_multi_2.dtype)
arr_multi_bool = np.array([False, True])
print(arr_multi_bool)
print(arr_multi_bool.dtype)
# Recebe uma lista de listas
matriz = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matriz)
print(type(matriz))
# Recebe uma lista que contem uma lista de listas, e assim continuamente
array_3d = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]]])
print(array_3d)
print(type(array_3d))
# A função zeros() criará um np array conforme as especificações fornecidas como parâmetro
# Uma dimensão
zeros_1d = np.zeros(5)
print(zeros_1d)
# Duas dimensões
zeros_2d = np.zeros((5, 5)) # Cria uma matriz 5x5
print(zeros_2d)
# Duas dimensões especificando o tipo de dados
zeros_2d_2 = np.zeros((5, 5), dtype = str) # Cria uma matriz 5x5 de strings
print(zeros_2d_2)
# Três dimensões
zeros_3d = np.zeros((5, 5, 5), dtype = int)
print(zeros_3d)
# Exatamente igual à função zeros, porém, cria com valor 1
ones_1d = np.ones(5)
print(ones_1d)
# Duas dimensões
ones_2d = np.ones((5, 5), dtype = int)
print(ones_2d)
# Três dimensões
ones_3d = np.ones((5, 5, 5), dtype = int)
print(ones_3d)
# Cria um np array com valores de 0 a 4
valores_1 = np.arange(5)
print(valores_1)
# Cria um np array com valores de 5 a 24
valores_2 = np.arange(5, 25)
print(valores_2)
# Cria um np array com valores de 5 a 49 de 3 em 3
valores_3 = np.arange(5, 50, 3)
print(valores_3)
# Valores de 0 a 10 espaçados por 2
iguais_1 = np.linspace(0, 10, 2)
print(iguais_1)
# Valores de 0 a 100 espaçados por 15
iguais_2 = np.linspace(0, 100, 15, dtype = int)
print(iguais_2)
# Utilizando o valor padrão para elementos não informados, o padrão é 50
iguais_3 = np.linspace(0, 1000, dtype = int)
print(iguais_3)
# Ao utilizar o parâmetro endpoint, irá informar se é pra incluir o último valor
iguais_endpoint_true = np.linspace(0, 1000, dtype = int, endpoint = True)
print(iguais_endpoint_true)
iguais_endpoint_false = np.linspace(0, 1000, dtype = int, endpoint = False)
print(iguais_endpoint_false)
# Criando um array preenchendo completamente com um valor informado
arr_full_01 = np.full(10, 5)
print(arr_full_01)
# Array de duas dimensões - Matriz 10x10 contendo apenas números 5
arr_full_02 = np.full((10, 10), 5)
print(arr_full_02)
# Array de três dimensões contendo o número 5
arr_full_03 = np.full((3, 2, 2), 5)
print(arr_full_03)
# Cria uma matriz identidade 5x5
identidade_01 = np.eye(5, dtype = int)
print(identidade_01)
# Criando um único número aleatório entre 0 a 10
random_01 = np.random.randint(10)
print(random_01)
# Criando um array entre 0 e 100 de 10 elementos
random_02 = np.random.randint(0, 100, 10)
print(random_02)
# Criando uma matriz 10x10 entre 0 e 100
random_02 = np.random.randint(0, 100, (10, 10))
print(random_02)
# Criando um array de 3 dimensões entre 0 e 100
random_03 = np.random.randint(0, 100, (3, 5, 5))
print(random_03)
# Criando 10 elementos aleatórios entre 0 e 1
random_04 = np.random.random(10)
print(random_04)
# Criando uma matriz 4x5 com elementos aleatórios entre 0 e 1
random_05 = np.random.random((4, 5))
print(random_05)
# Criando um array de três dimensões com elementos aleatórios entre 0 e 1
random_05 = np.random.random((4, 5, 5))
print(random_05)
# Verificando a modelagem do array, ou seja, quantidade de linhas, colunas e páginas
print(random_02.shape)
# Verificando o número de dimensões de um array
print(random_02.ndim)
# Verificando outros arrays
print(random_03.shape)
print(random_03.ndim)
print('\n')
print(random_04.shape)
print(random_04.ndim)
print('\n')
print(random_05.shape)
print(random_05.ndim)
# Verificando o tamanho das dimensões
print(len(random_02))
print(len(random_03))
# Verificando o tamanho das dimensões de arrays multidimensionais
print(random_02[0])
print(len(random_02[0]))
print(random_02[0][2])
# Verificando a quantidade de elementos
print(random_02.size)
print(random_03.size)
print(random_04.size)
print(random_05.size)
# Verificando o tipo de dados de elementos
print(random_02.dtype)
print(random_03.dtype)
print(random_04.dtype)
print(random_05.dtype)
# Criando os arrays para realizar as operações
arr_1d = np.random.randint(0, 10, 10)
arr_2d = np.random.randint(1, 101, (4, 5))
arr_3d = np.random.random((3, 4, 5))
print(arr_1d)
print('\n')
print(arr_2d)
print('\n')
print(arr_3d)
# Acessar apenas um índice de um array de 1 dimensão
item_1 = arr_1d[1]
item_2 = arr_1d[-1]
print(item_1)
print(item_2)
# Acessar apenas um índice de um array de 2 dimensões
item_1 = arr_2d[1]
print(item_1)
item_2 = arr_2d[1][2]
print(item_2)
# Acessar apenas um índice de um array de 2 dimensões
item_1 = arr_3d[1]
print(item_1)
print('\n')
item_2 = arr_3d[1][2]
print(item_2)
print('\n')
item_3 = arr_3d[1][2][3]
print(item_3)
print('\n')
item_4 = arr_3d[1, 3]
print(item_4)
# Acessando através de uma lista de linhas e colunas
linhas = [0, 1, 3]
colunas = [1, 2, 0]
itens = arr_2d[linhas, colunas]
print(itens)
# Acessando através de slicing em arrays de 1 dimensão
itens = arr_1d[:2]
print(itens)
itens = arr_1d[1:3]
print(itens)
# Acessando através de slicing em arrays de 2 dimensões (matrizes)
itens = arr_2d[:2]
print(itens)
itens = arr_2d[1:2, 3]
print(itens)
# Slicing em arrays de três dimensões (faces, linhas, colunas)
print(arr_3d)
print('\n')
itens = arr_3d[0:2, 1:3, 2:4]
print(itens)
# Array para utilizar
arr_booleano_1d = np.random.randint(1, 501, (10))
arr_booleano_2d = np.random.randint(1, 501, (5, 5))
arr_booleano_3d = np.random.randint(1, 501, (3, 2, 5))
print(arr_booleano_1d)
print('\n')
print(arr_booleano_2d)
print('\n')
print(arr_booleano_3d)
# Filtrando o array 1D por todos os elementos que sejam maiores que 300
filtro = arr_booleano_1d[arr_booleano_1d > 300]
print(filtro)
# Filtrando o array 2D por todos os elementos que sejam maiores que 50
filtro = arr_booleano_2d[arr_booleano_2d > 300]
print(filtro)
# Retorna um array de booleanos comparando elementos que sejam maiores que 50
booleanos = arr_booleano_3d > 300
print(booleanos)
# Calcular a média dos elementos dos arrays
media_1d = arr_booleano_1d.mean()
media_2d = arr_booleano_2d.mean()
media_3d = arr_booleano_3d.mean()
print(media_1d)
print(media_2d)
print(media_3d)
# Criando arrays para utilizar
arr_1d = np.random.randint(1,200, 12)
arr_2d = np.random.randint(1,200, (3,4))
arr_3d = np.random.randint(1,200, (2,3,6))
print(arr_1d)
print(arr_1d.dtype)
print('\n')
print(arr_2d)
print(arr_2d.dtype)
print('\n')
print(arr_3d)
print(arr_3d.dtype)
# Alterando elementos de um array de 1 dimensão
valor_anterior = arr_1d[0]
print('Valor anterior: {}'.format(str(valor_anterior)))
arr_1d[0] = 12
print('Valor atual: {}'.format(str(arr_1d[0])))
# Alterando elementos de um array de 2 dimensões
valor_anterior = arr_2d[0][0]
print('Valor anterior: {}'.format(str(valor_anterior)))
arr_2d[0][0] = 12
print('Valor atual: {}'.format(str(arr_2d[0][0])))
# Alterando elementos de um array de 3 dimensões
valor_anterior = arr_3d[0][0][0]
print('Valor anterior: {}'.format(str(valor_anterior)))
arr_3d[0][0][0] = 12
print('Valor atual: {}'.format(str(arr_3d[0][0][0])))
# Adicionando novos elementos a um array de 1 dimensão
arr_1d_add = np.append(arr_1d, [1, 2, 3])
print(arr_1d_add)
# Adicionando novos elementos a um array de 2 dimensões
arr_2d_add = np.append(arr_2d, [1, 2, 3])
print(arr_2d_add)
# Adicionando novos elementos a um array de 3 dimensões
arr_3d_add = np.append(arr_3d, [1, 2, 3])
print(arr_3d_add)
# Removendo elementos a um array de 1 dimensão
arr_1d_delete = np.delete(arr_1d_add, [0, 1, 2])
print(arr_1d_delete)
# Removendo elementos a um array de 2 dimensões
arr_2d_delete = np.delete(arr_2d_add, [0, 1, 2])
print(arr_2d_delete)
# Removendo elementos a um array de 3 dimensões
arr_3d_delete = np.delete(arr_3d_add, [0, 1, 2])
print(arr_3d_delete)
# Comparando dois arrays e printando se são iguais
arr_1d_1 = np.random.randint(0, 10, 20)
arr_1d_2 = np.random.randint(0, 10, 20)
print(arr_1d_1 == arr_1d_2)
# Comparando um elemento específico
arr_1d_1 == 1
# Retorna apenas onde os elementos são iguais a 3
print(arr_1d_1[arr_1d_1 == 3])
# Criando um array de 1 dimensão, um array apenas com números ímpares entre 1 a 20 e um que é a multiplicação do 1º array
arr_1d = np.arange(1, 11)
arr_2d = np.arange(1, 20, 2)
arr_3d = 2 * arr_1d
print(arr_1d)
print(arr_2d)
print(arr_3d)
# Criando um array com a soma todos os valores por 4
arr_soma = arr_1d + 4
print(arr_1d)
print(arr_soma)
# Adição, subtração, multiplicação, divisão entre arrays
# Soma
print('Soma')
arr_soma_2 = arr_1d + arr_soma
print(arr_soma_2)
# ou então
arr_soma_2 = np.add(arr_1d, arr_soma)
print(arr_soma_2)
print('\n')
# Subtração
print('Subtração')
arr_subtracao = arr_1d - arr_soma
print(arr_subtracao)
# ou então
arr_subtracao = np.subtract(arr_1d, arr_soma)
print(arr_subtracao)
print('\n')
# Multiplicação
print('Multiplicação')
arr_mult = arr_1d * arr_soma
print(arr_mult)
# ou então
arr_mult = np.multiply(arr_1d, arr_soma)
print(arr_mult)
print('\n')
# Divisão
print('Divisão')
arr_divisao = arr_1d / arr_soma
print(arr_divisao)
# ou então
arr_divisao = np.divide(arr_1d, arr_soma)
print(arr_divisao)
# Quadrado dos valores do array
arr_quadrado = np.sqrt(arr_1d)
print(arr_quadrado)
# Criando um array numpy para testar as funções
dados = np.random.randint(1, 101, (5,10))
print(dados)
# Soma normal e com eixo
soma_dados = dados.sum()
soma_dados_eixo_colunas = dados.sum(axis = 0)
soma_dados_eixo_linhas = dados.sum(axis = 1)
print(soma_dados)
print(soma_dados_eixo_colunas)
print(soma_dados_eixo_linhas)
# Utilizando a função built-in do Python é o mesmo que a soma no eixo da coluna
soma_dados_built_in = sum(dados)
print(soma_dados_eixo_colunas)
print(soma_dados_built_in)
# Valores máximos e mínimos gerais e por eixo
maior_geral = dados.max()
menor_geral = dados.min()
maior_colunas = dados.max(axis = 0)
menor_colunas = dados.max(axis = 0)
maior_linhas = dados.max(axis = 1)
menor_linhas = dados.max(axis = 1)
print('Maior geral: {}'.format(str(maior_geral)))
print('Menor geral: {}'.format(str(menor_geral)))
print('Maior colunas: {}'.format(str(maior_colunas)))
print('Menor colunas: {}'.format(str(menor_colunas)))
print('Maior linhas: {}'.format(str(maior_linhas)))
print('Menor linhas: {}'.format(str(menor_linhas)))
# Soma acumulada geral e por eixos
soma_acumulada_geral = dados.cumsum()
soma_acumulada_colunas = dados.cumsum(axis = 0)
soma_acumulada_linhas = dados.cumsum(axis = 1)
print('Soma acumulada geral: {}'.format(str(soma_acumulada_geral)))
print('Soma acumulada colunas: {}'.format(str(soma_acumulada_colunas)))
print('Soma acumulada linhas: {}'.format(str(soma_acumulada_linhas)))
# Média geral por eixos
media_geral = dados.mean()
media_colunas = dados.mean(axis = 0)
media_linhas = dados.mean(axis = 1)
print('Média geral: {}'.format(str(media_geral)))
print('Média colunas: {}'.format(str(media_colunas)))
print('Média linhas: {}'.format(str(media_linhas)))
# Desvio Padrão geral por eixos
desvio_padrao_geral = dados.std()
desvio_padrao_colunas = dados.std(axis = 0)
desvio_padrao_linhas = dados.std(axis = 1)
print('Desvio Padrão geral: {}'.format(str(desvio_padrao_geral)))
print('Desvio Padrão colunas: {}'.format(str(desvio_padrao_colunas)))
print('Desvio Padrão linhas: {}'.format(str(desvio_padrao_linhas)))
# Mediana geral por eixos
mediana_geral = np.median(dados)
mediana_colunas = np.median(dados, axis = 0)
mediana_linhas = np.median(dados, axis = 1)
print('Mediana geral: {}'.format(str(mediana_geral)))
print('Mediana colunas: {}'.format(str(mediana_colunas)))
print('Mediana linhas: {}'.format(str(mediana_linhas)))
# Criando o array para testes
arr_2d_1 = np.random.randint(1, 50,(4,5))
arr_2d_2 = np.random.randint(50, 100,(4,5))
print(arr_2d_1)
print('\n')
print(arr_2d_2)
# Alterando via referência de memória sem usar copy()
arr_2d_3 = arr_2d_2
arr_2d_3[arr_2d_3 < 70] = - 1
print(arr_2d_2)
print('\n')
print(arr_2d_3)
# Alterando utilizando copy() - cria uma nova referência na memória e não modifica o array copiado
arr_2d_3 = arr_2d_2.copy()
arr_2d_3[arr_2d_3 < 90] = - 2
print(arr_2d_2)
print('\n')
print(arr_2d_3)
# Criando os arrays para ordenar
sort_1d = np.random.randint(1, 99, 15)
sort_2d = np.random.randint(1, 99, (10, 10))
print(sort_1d)
print('\n')
print(sort_2d)
# Ordenação simples em array de 1 dimensão
sort_1d.sort()
print(sort_1d)
# Ordenação simples, por linhas e colunas em array de 2 dimensões
sort_normal = sort_2d.copy()
sort_colunas = sort_2d.copy()
sort_linhas = sort_2d.copy()
sort_colunas.sort()
print(sort_normal)
print('\n')
sort_colunas.sort(axis = 0)
print(sort_colunas)
print('\n')
sort_linhas.sort(axis = 1)
print(sort_linhas)
# Criar o array para transpor
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(arr)
# O atributo T ou a função transpose() irão mostrar o array transposto, porém, não modificará o array
print(arr.T)
print('\n')
print(arr.transpose())
print('\n')
print(arr)
# Utilizando a função reshape, é possível alterar o formato do array, um ndarray 4x5 pode tornar-se 5x4
arr = np.arange(1, 25)
print(arr)
print(arr.shape)
# Alterando o shape do array para 2 linhas e 12 colunas
arr.shape = (2, 12)
print(arr)
# Alterando o shape do array para 3 linhas e 8 colunas
arr.shape = (3, 8)
print(arr)
# A função reshape() não altera o array, apenas mostra o reshaping
print(arr.reshape(4, 6))
print('\n')
print(arr)
# Linearizar um array em 1 dimensão com as funções flatten() e ravel()
arr_linear_1 = arr.flatten()
arr_linear_2 = arr.ravel()
print(arr_linear_1)
print(arr_linear_2)
# Criando arrays para concatenar
arr_1 = np.random.randint(1,101,(3, 9))
arr_2 = np.random.randint(1,101,(5, 9))
arr_3 = np.random.randint(1,101,(5, 4))
print(arr_1)
print('\n')
print(arr_2)
print('\n')
print(arr_3)
# Utilizando a concatenação vertical pelo eixo das colunas utilizando concatenate axis = 0 ou com vstack (faz direto)
concat_1 = np.concatenate((arr_1, arr_2), axis = 0)
vstack = np.vstack((arr_1, arr_2))
print(concat_1)
print('\n')
print(vstack)
# Utilizando a concatenação horizontal pelo eixo das linhas utilizando concatenate axis = 1 ou com hstack (faz direto)
concat_2 = np.concatenate((arr_2, arr_3), axis = 1)
hstack = np.hstack((arr_2, arr_3))
print(concat_2)
print('\n')
print(hstack)
# Dividindo o primeiro array concatenado em 2 pelo eixo das colunas | divisão vertical com vsplit()
vsplit = np.vsplit(concat_1, 2)
print(concat_1)
print('\n')
print(vsplit[0])
print('\n')
print(vsplit[1])
# Dividindo o primeiro array concatenado em 3 pelo eixo das linhas | divisão horizontal com hsplit()
hsplit = np.hsplit(concat_1, 3)
print(concat_1)
print('\n')
print(hsplit[0])
print('\n')
print(hsplit[1])
print('\n')
print(hsplit[2])
# Será criada uma função em Python para comparar as somas e a mesma função no NumPy
idades = [12, 15, 14, 88, 32, 54, 41, 11, 25]
def soma(idades):
soma = 0
for num in idades:
soma += num
return soma
print(soma(idades))
print(sum(idades))
print(np.sum(idades))
# Gerando uma lista de idades entre 0 a 50 com 20 milhões de dados
idades = np.random.randint(0, 50, 20000000)
print(soma(idades))
print(sum(idades))
print(np.sum(idades))
%timeit soma(idades)
%timeit sum(idades)
%timeit np.sum(idades)
numeros = np.random.randint(1000, 2000, 2000000)
def quadrados(numeros):
quadrados = []
for numero in numeros:
quadrados.append(numero ** 2)
return quadrados
def quadrados_comprehension(numeros):
return [num * num for num in numeros]
def quadrados_map(numeros):
return list(map(lambda n: n ** 2, numeros))
%timeit quadrados(numeros)
%timeit quadrados_comprehension(numeros)
%timeit quadrados_map(numeros)
%timeit list(np.power(numeros, 2))
arr = np.eye(5)
arr = arr - (np.eye(5) + 1)
arr
arr