<jupyter_start><jupyter_text>NumPyNumpy é um pacote fundamental para programação científica com Python. Ele traz consigo uma variedade de operações matemáticas, principalmente referente à operações algébricas com dados N-dimensionais!<jupyter_code>import numpy as np<jupyter_output><empty_output><jupyter_text>A base de seu funcionamento é o *np.array*, que retorna o objeto *array* sobre o qual todas as funções estão implementadas<jupyter_code>a = np.array([1, 2, 3])
print(repr(a), a.shape, end="\n\n")

b = np.array([(1, 2, 3), (4, 5, 6)])
print(repr(b), b.shape)<jupyter_output><empty_output><jupyter_text>O array traz consigo diversos operadores já implementados:<jupyter_code>print(b.T, end="\n\n") # transpoe uma matriz
print(a + b, end="\n\n") # soma um vetor linha/coluna a todas as linhas/colunas de uma matriz
print(b - a, end="\n\n") # subtrai um vetor linha/coluna a todas as linhas/colunas de uma matriz

# multiplica os elementos de um vetor linha/coluna 
# a todos os elementos das linhas/colunas de uma matriz
print(a * b, end="\n\n") 

print(a**2, end="\n\n") # eleva os elementos ao quadrado<jupyter_output><empty_output><jupyter_text>O Numpy traz consigo diversas operações matemáticas implementadas, as quais podem ser aplicadas sobre um valor ou um array de valores.**OBS:** podemos ver a aplicações dessas funções como uma operação de transformação (*map*)<jupyter_code>print(10*np.sin(1)) # seno trigonométrico de 1
print(10*np.sin(a)) # seno trigonométrico de cada elemento de a<jupyter_output><empty_output><jupyter_text>Uma operação booleana pode ser aplicada sobre todos os elementos de um array, retornando um array de mesmas dimensões com o resultado da operação<jupyter_code>b<35<jupyter_output><empty_output><jupyter_text>Existem também operações utilitárias pré-definidas em um array<jupyter_code>print(b,end="\n\n")
print('Axis 1: %s' % b[0], end="\n\n") # retorna um vetor
print(np.average(b), end="\n\n") # tira a média dos elementos
print(np.average(b, axis=1), end="\n\n") # tira a média dos elementos dos vetores no eixo 1
print(b.sum(), end="\n\n") # retorna as somas dos valores
print(b.sum(axis=1), end="\n\n") # retorna as somas dos valores no eixo 1
print(b.min(), end="\n\n") # retorna o menor valor
print(b.max(), end="\n\n") # retorna o maior valor<jupyter_output><empty_output><jupyter_text>Existem também funções para gerar arrays pré-inicializados<jupyter_code>print(np.zeros((3, 5)), end="\n\n") # array de zeros com dimensões [3,5]
print(np.ones((2,3,4)), end="\n\n------------\n\n") # array de uns com dimensões [2,3,4]
print(np.full((2, 2), 10), end="\n\n") # array de 10 com dimensões [2,2]
print(np.arange(10, 30, 5), end="\n\n") # valores de 10 a 30 com passo 5
print(np.random.rand(2, 3), end="\n\n") # array cde dimensao [2,3] com valores aleatórios<jupyter_output><empty_output><jupyter_text>Podemos selecionar intervalos do array, permitindo recuperar apenas uma porção dele<jupyter_code>d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
d
d[:, 0] # todas as linhas (:) da primeira coluna (0)
d[:, 1] # todas as linhas (:) da segunda coluna (1)
d[:, 0:2] # todas as linhas (:) das colunas de 0 à 2
d[:, 2] # todas as linhas (:) da terceira coluna (2)<jupyter_output><empty_output><jupyter_text>O Numpy conta também com funções para salvar/ler arrays de arquivos<jupyter_code>x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.save('/tmp/x.npy', x)
del(x)
x = np.load('/tmp/x.npy')
print(x)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1472957422324511, 'fraction_numerical': 0.024453394706559262, 'mean_word_length': 5.499065420560748, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 37, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '633582', 'license': 'MIT', 'n_tokens_mistral': 1423, 'n_tokens_neox': 1340, 'n_words': 398, 'path': '2020/02-python-bibliotecas-manipulacao-dados/Numpy.ipynb', 'repo_name': 'nicolassoares20/data-science-cookbook', 'size': '3476'}