quinta-feira, 23 de abril de 2020

MySQL em Python

MySQL em Python


Instalação e teste

MySQL é um dos bancos de dados mais utilizados na atualidade. E nos podemos utilizar esse banco de dados nas nossas aplicações em python.

Database MySQL

Para poder utilizar o banco de dados MySQL nas nossas aplicações, primeiro precisamos ter o MySQL instalado no nosso computador.
Caso você não tenha o MySQL instalado você pode baixa-lo gratuitamente aqui.
Se você utiliza uma distribuição Linux tente instalar o pacote mysql-server pelo gerenciador de pacotes da sua distribuição.
Uma alternativa ao MySQL é o MariaDB. O MariaDB é um fork do MySQL e é mais fácil de instalar. Todos os exemplos vão funcionar perfeitamente no MariaDB.

Instalando o driver do MySQL

Para ter acesso ao nosso banco de dados precisamos instalar o drive do MySQL.
Para instalar esse drive vamos utilizar o pip.
Copie e cole o texto abaixo no terminal (Linux ou Mac) ou promtp de comando (Windows).
python -m pip install mysql-connector
Com isso feito estamos prontos para usar o banco de dados MySQL.

Testando a conexão com o banco de dados

Para testar a conexão com o banco de dados é só importar o módulo mysql.connector. Se for apresentado algum erro a instalação do banco de dados ou do drive não foi bem sucedida. E se não for apresentado nada à instalação foi bem sucedida.
Exemplo
import mysql.connector

Criando uma conexão com o banco de dados MySQL

Para criar uma conexão com o banco de dados utilizamos o método connect. O método connect precisa receber os argumentos host, user e passwd. O primeiro argumento é o endereço da maquina (Se for uma maquina remota um ip deve ser fornecido, não é o nosso caso por isso usamos localhost). O segundo argumento é o usuário (vamos utilizar o usuário root. Esse já é criado por padrão). E por último o passwd. Nos exemplos desse tutorial não vamos utilizar senha, mas se você definiu uma senha deve utiliza-la.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd=''
)

print(meubd)
Você deve receber uma resposta parecido com essa:
<mysql.connector.connection.MySQLConnection object at 0x02ED60B8>

Criando um banco de dados

Para criar um banco de dados chamamos o método execute com a seguinte string: CREATE DATABASE nome-do-meu-banco-de-dados.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd=''
)

meucursor = meubd.cursor()
meucursor.execute('CREATE DATABASE meuBD')
O método cursor instancia objetos que podem executar operações como instruções SQL.
Que é exatamente o que o método execute faz.
Se não for apresentado nenhum erro o banco de dados meuBD foi criado.

Verificando se um banco de dados existe

Para verificar se um banco de dados existe vamos utilizar a instrução SQL SHOW DATABASES.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd=''
)

meucursor = meubd.cursor()
meucursor.execute('SHOW DATABASES')

for i in meucursor:
  print(i)
Esse exemplo vai retornar uma lista com os bancos de dados do sistema.
Também podemos definir o banco de dados no momento da conexão.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
Se houver algum erro é por que o banco de dados meuBD não existe.

Criando tabelas

Para criar uma tabela usamos a instrução SQL CREATE TABLE nomedatabela.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()

meucursor.execute("CREATE TABLE minhaT (name VARCHAR(255), address VARCHAR(255))")
Se nenhum erro for apresentado a tabela minhaT foi criada.

Verificando se uma tabela existe

Você pode verificar se uma tabela existe no seu banco de dados usando a instrução sql SHOW TABLES. A instrução show tables vai monstra todas as tabelas do seu banco de dados.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
meucursor.execute('SHOW TABLES')

for i in meucursor:
  print(i)
Quando você criar uma tabela, você também deve criar uma coluna com uma chave exclusiva para cada registro.
Isso pode ser feito definindo uma chave primária.
Usamos a instrução "INT AUTO_INCREMENT PRIMARY KEY" que inserirá um número exclusivo para cada registro. Começando em um e aumentado em um para cada registro.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
meucursor.execute('CREATE TABLE minhaT (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))')
Se a tabela já existir utilizamos ALTER TABLE.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
meucursor.execute('ALTER TABLE minhaT ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY')

Inserindo dados na tabela

Para inserir dados numa tabela utilizamos a instrução sql INSERT INTO.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "INSERT INTO minhaT (name, address) VALUES (%s, %s)"
dados = ("João", "São Paulo - SP")
meucursor.execute(instrucaoSQL, dados)

meubd.commit()

print(meucursor.rowcount, 'Dados inseridos.')
O método commit salva as alterações feitas no banco de dados.

Inserindo múltiplas linhas

Para inserir múltiplas linhas vamos utilizar o método executemany. O método executemany recebe dois argumentos: a instrução sql e os dados. Os dados devem estar numa lista de tuplas.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "INSERT INTO minhaT (name, address) VALUES (%s, %s)"
dados = [
  ('Maria', 'Rio branco - AC'),
  ('Fabiana', 'Tíbau - RN'),
  ('Fábio', 'Rio de janeiro - RJ'),
  ('Michele', 'Fortaleza - CE')
]

meucursor.executemany(instrucaoSQL, dados)

meubd.commit()

print(meucursor.rowcount, 'Dados inseridos.')

ID da última linha inserida

É fácil descobrir o id da última linha inserida na tabela com o atributo lastrowid.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "INSERT INTO minhaT (name, address) VALUES (%s, %s)"
dados = ("Naruto", "Konoha")
meucursor.execute(instrucaoSQL, dados)

meubd.commit()

print("Uma linha foi inserida, ID:", meucursor.lastrowid)

Selecionando elementos da tabela

Para selecionar dados de uma tabela utilizamos a instrução sql SELECT.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
meucursor.execute("SELECT * FROM minhaT")

resultado = meucursor.fetchall()

for i in resultado:
  print(i)
Nesse exemplo estamos selecionando todos os elementos da tabela minhaT.
O método fetchall busca todas as linhas da última instrução executada.

Selecionando colunas

Para selecionar as colunas da nossa tabela é só especificarmos os nomes das colunas.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
meucursor.execute("SELECT name, address FROM minhaT")

resultado = meucursor.fetchall()

for i in resultado:
  print(i)

Método fetchone

Se você só precisar da primeira linha da tabela use o método fetchone. O método fetchone retorna uma tupla com a primeira linha da tabela.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
meucursor.execute("SELECT * FROM minhaT")

resultado = meucursor.fetchone()

print(resultado)

Instrução WHERE

Com a instrução where selecionamos com dados com um filtro melhor. Em vez de selecionar uma coluna ou uma linha da nossa tabela podemos selecionar um dado.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "SELECT * FROM minhaT WHERE address ='Rio branco - AC'"

meucursor.execute(instrucaoSQL)

resultado = meucursor.fetchall()

for i in resultado:
  print(i)
Com esse exemplo todos os dados da coluna address que o valor seja “Rio branco – AC” vão ser mostrados.

Caracteres coringa

Se você precisar procurar no banco de dados por um dado que você só conhece uma parte, os caracteres coringa podem ajudar. Com eles você só precisar saber uma parte do que você está procurando.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "SELECT * FROM minhaT WHERE address LIKE '%RN%'"

meucursor.execute(instrucaoSQL)

resultado = meucursor.fetchall()

for i in resultado:
  print(i)

Ordenando por resultado

Podemos ordenar os nossos resultados de forma crescente ou decrescente usando a instrução SORT BY.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "SELECT * FROM minhaT ORDER BY name"

meucursor.execute(instrucaoSQL)

resultado = meucursor.fetchall()

for i in resultado:
  print(i)

Ordem decrescente

Por padrão a instrução ORDER BY ordena os resultados de forma crescente. Para mudarmos esse comportamento usamos o DESC.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "SELECT * FROM minhaT ORDER BY name DESC"

meucursor.execute(instrucaoSQL)

resultado = meucursor.fetchall()

for i in resultado:
  print(i)

Apagando dados

Você pode apagar dados de uma tabela com a instrução DELETE FROM.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "DELETE FROM minhaT WHERE address = 'Rio branco - AC'"

meucursor.execute(instrucaoSQL)
meubd.commit()

print(meucursor.rowcount, 'Dados apagados.')

Apagando uma tabela

Para apagar uma tabela do nosso banco de dados usamos a instrução DROP TABLE.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = 'DROP TABLE minhaT'

meucursor.execute(instrucaoSQL)
Com esse exemplo se você tentar apagar uma tabela que não existe um erro vai ser lançado. Para evitar isso podemos usar o IF EXISTS.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = 'DROP TABLE IF EXISTS minhaT'

meucursor.execute(instrucaoSQL)

Atualizando dados de uma tabela

Para atualizar dados de uma tabela utilizamos a instrução UPDATE.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
instrucaoSQL = "UPDATE minhaT SET address = 'Campinas' WHERE address = 'Campinas - SP'"

meucursor.execute(instrucaoSQL)

meubd.commit()

print(meucursor.rowcount, 'Dado(s) atualizado(s).')
O primeiro valor (Campinas) é o dado que será alterado.

Limitando os resultados

Com uma tabela pequena não é preciso limitar os resultados numa consulta. Mas em uma tabela com centenas ou milhões de resultados limitar os resultados passa a ser interessante.
Podemos fazer isso com a instrução LIMIT.
Exemplo
import mysql.connector

meubd = mysql.connector.connect(
  host='localhost', # máquina local
  user='root',
  passwd='',
  database='meuBD'
)
meucursor = meubd.cursor()
meucursor.execute("SELECT * FROM minhaT LIMIT 5 OFFSET 2")

resultado = meucursor.fetchall()

for i in resultado:
  print(i)
Esse exemplo retorna cinco resultados começando da terceira linha.

terça-feira, 21 de abril de 2020

Operações com conjuntos com NumPy

Operações com conjuntos com NumPy


Um conjunto é uma seleção de elementos com caracterizas semelhantes. Os conjuntos são usados para operações de união, interseção e diferença.
A biblioteca numpy fornece funções para fazermos as operações de união, interseção e diferença.

Criando conjuntos

Para criarmos um conjunto podemos utilizar a função unique. A função unique recebe uma lista e retorna um conjunto. Lembre-se que a matriz passada para a função unique deve ser de uma dimensão.
Exemplo
import numpy as np

array = np.array([1, 1, 2, 2, 3, 4, 5, 5])

conjunto = np.unique(array)

print(conjunto)
Nesse exemplo passamos uma matriz com elementos repetidos para a função unique e ela retorna um conjunto sem elementos repetidos.

Elementos exclusivos de cada conjunto

Para acharmos os elementos exclusivos de cada conjunto podemos utilizar a função union1d. A função union1d recebe dois conjuntos e retorna um conjunto com os elementos exclusivos de cada conjunto passados para a função.
Exemplo
import numpy as np

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

uniao = np.union1d(array1, array2)

print(uniao)

Interseção

A interseção de dois conjuntos são os elementos presentes nos dois conjuntos. Para acharmos a interseção de dois conjuntos podemos utilizar a função intersect1d. A função intersect1d recebe duas matrizes e retorna uma matriz com a interseção das duas matrizes passadas para a função.
Exemplo
import numpy as np

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

uniao = np.intersect1d(array1, array2)

print(uniao)
A função intersect1d pode receber o argumento assume_unique. O argumento assume_unique, se definido como True, torna a operação mais rápida. Quando estivermos lidando com conjunto sempre devemos definir o argumento assume_unique como True.
Exemplo
import numpy as np

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

uniao = np.intersect1d(array1, array2, assume_unique=True)

print(uniao)
Nesse exemplo a diferença não é perceptível, mas quando estivermos lidando com conjuntos muito grandes de dados a diferença é muito grande.

Diferença

Para descobrirmos qual são os elementos do primeiro conjunto que não estão presentes no segundo conjunto, utilizamos a função setdiff1d. A função setdiff1d recebe duas matrizes e retorna uma matriz com os elementos que estão presentes apenas na primeira matriz.
Exemplo
import numpy as np

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

uniao = np.setdiff1d(array1, array2, assume_unique=True)

print(uniao)

Diferença simétrica

Na diferença simétrica o resultado é uma matriz com os elementos exclusivos de cada matriz. Os elementos que existem nas duas matrizes são removidos. Para obter a diferença simétrica de dois conjuntos utilizamos a função setxor1d da biblioteca numpy.
Exemplo
import numpy as np

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

uniao = np.setxor1d(array1, array2, assume_unique=True)

print(uniao)

segunda-feira, 20 de abril de 2020

Funções hiperbólicas em NumPy

Funções hiperbólicas em NumPy


Para podemos trabalhar com as funções hiperbólicas a biblioteca numpy disponibiliza três funções: sinh, cosh e tanh. Essas funções recebem radianos como argumentos e retornam seno hiperbólico, cossenos hiperbólico e tangente hiperbólico, respectivamente.
Veja um exemplo com a função sinh:
Exemplo
import numpy as np

a = np.sinh(np.pi/2)

print(a)
Com esse exemplo descobrimos que o seno hiperbólico de pi sobre 2 é 2,30.
A função sinh também pode receber os radianos numa matriz e retornar uma matriz com os resultados.
Exemplo
import numpy as np

array = np.array([np.pi/2, np.pi/3, np.pi/4, np.pi/5])

print(np.sinh(array))

Seno, cosseno e tangente hiperbólica para ângulo

Para descobrir o radiano com o seno, cosseno e tangente hiperbólica, podemos utilizar as funções arcsinh, arccosh e arctanh, respectivamente. E logo depois utilizar o resultado dessas funções e descobrir o ângulo com a função rad2deg.
Exemplo
import numpy as np

a = np.rad2deg(np.arcsinh(1.0))

print(a)
A função rad2deg recebe um radiano e retorna um grau.

Trigonometria com NumPy

Trigonometria com NumPy


A trigonometria estuda as relações entre os lados e os ângulos dos triângulos.
As funções trigonométricas são as funções relacionadas aos triângulos retângulos. As funções relacionadas aos triângulos retângulos são os senos, cossenos e tangentes. Para trabalhar com senos, cossenos e tangentes a biblioteca numpy fornece as funções sin, cos e tan.
As funções sin, cos e tan recebem um valor radiano e fornecem os cenos, cossenos e tangentes, respectivamente.
Exemplo
import numpy as np

seno = np.sin(np.pi/2)

print(seno)
Nesse exemplo descobrimos que o seno de pi sobre dois é um.
A função sin também pode receber uma listas com os valores.
Exemplo
import numpy as np

seno = np.sin([np.pi/2, np.pi/3, np.pi/4, np.pi/5])

print(seno)
Nesse exemplo o retorna da função sin também será uma lista com os resultados dos senos de pi sobre 2, pi sobre 3, pi sobre 4 e pi sobre 5.
As funções cos e tan funcionam da mesma maneira que a sin. Se for passado um valor para a função ela só vai retornar um valor. Se for passado mais de uma valor a função vai retornar uma lista com os resultados.

Convertendo graus em radianos

A função matemática para converter graus em radianos é pi dividido por cento e oitenta vezes o grau desejado. Pi/180 * grau para a conversão.
As funções trigonométricas recebem radianos como parâmetros. Por isso a biblioteca numpy fornece funções para converter graus em radianos, e vice-versa.
Para converter graus em radianos a função usada é deg2rad. A função deg2rad pode receber um único valor ou uma lista com os graus para conversão.
Exemplo
import numpy as np

matriz = np.array([90, 180, 270, 360])

radianos = np.deg2rad(matriz)

print(radianos)

Radianos para graus

A função para transformar radianos em graus é a rad2deg. Assim como a função deg2rad, a função rad2deg pode receber um único valor ou receber uma lista com os radianos. Nesse caso o resultado da função rad2deg vai ser uma lista com os valores convertidos.
Exemplo
import numpy as np

matriz = np.array([np.pi/2, np.pi, 1.5*np.pi, 2*np.pi])

graus = np.rad2deg(matriz)

print(graus)

Seno, cosseno e tangente para radianos e ângulo

Se você precisar descobrir um radiano a partir de um seno, cosseno ou tangente a biblioteca numpy fornece as funções para isso. São elas: arcsin, arccos e arctan, respectivamente. E para converter de radianos para graus é só usar a função rad2deg.
Exemplo
import numpy as np

graus = np.rad2deg(np.arcsin(1.0))

print(graus)
As funções arcsin, arccos e arctan podem receber uma matriz como argumentos e retornar uma matriz com os resultados da conversão.
Exemplo
import numpy as np

graus = np.rad2deg(np.arcsin([1, -1, 0.1]))

print(graus)

Hipotenusa

Podemos utilizar o teorema de pitágoras com a biblioteca numpy e descobrir a hipotenusa de um triangulo retângulo. A função para isso é a hypot.
Exemplo
import numpy as np

base = 8
cateto = 5

hipotenusa = np.hypot(base, cateto)

print(hipotenusa)
Com esse exemplo descobrimos que a hipotenusa de um triangulo retângulo, com o valor da base sendo oito e o cateto sendo cinco, é 9,43.

domingo, 19 de abril de 2020

MMC e MDC com NumPy

MMC e MDC com NumPy

Mínimo múltiplo comum

O mínimo múltiplo comum (mmc) de dois números é o menor numero natural que é múltiplo simultaneamente dos dois números. Se não existir tal número natural então o mmc é zero. Para encontrar os múltiplos de um número, basta multiplicar esse número pela sequência dos números naturais.
Para saber se um número é múltiplo de um outro, devemos dividir pelo outro. Por exemplo, 25 é múltiplo de 5, porque ele é divisível por 5.
A função para descobrir o mínimo múltiplo comum de dois números com a biblioteca numpy em python é a lcm.
Exemplo
import numpy as np

print(np.lcm(6, 4))
Para descobrir o mínimo múltiplo comum de uma matriz podemos utilizar a função reduce da biblioteca numpy. A função reduce recebe uma matriz e retorna o mínimo múltiplo comum de todos os números da matriz.
Exemplo
import numpy as np

print(np.lcm.reduce([6, 4, 9]))

Máximo divisor comum

O maior divisor comum é o maior número que pode dividir dois ou mais números com resto igual a zero. Por exemplo: os divisores comuns de 12 e 18 são 1,2,3 e 6. Dentre eles, 6 é o maior. Então chamamos o 6 de máximo divisor comum de 12 e 18.
Para descobri o máximo divisor comum de dois números com a biblioteca numpy em python usamos a função gcd.
Exemplo
import numpy as np

print(np.gcd(9, 6))
Nesse exemplo, o resultado é três pois o três é o maior número que pode dividir seis e nove sem resto.
Para descobrir o maior divisor comum de uma matriz a função reduce é usada.
Exemplo
import numpy as np

print(np.gcd.reduce([138, 66, 402, 324]))
O resultado da função reduce é o número seis. Isso porque os números da matriz são todos múltiplos do número seis.

Produto e diferença com NumPy

Produto e diferença com NumPy


Produto

Para descobrir qual é o produto dos elementos de uma matriz podemos utilizar a função prod da biblioteca numpy.
Exemplo
import numpy as np

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

matriz = np.prod(array)

print(matriz)
Com esse exemplo o resultado será seis, porque 1*2*3 é igual a 6.
A função prod também pode receber uma lista com matrizes.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

matriz = np.prod([array1, array2])

print(matriz)
Nesse exemplo o resultado é 720, pois 1*2*3*4*5*6 é igual 720. Todos os elementos das duas matrizes são multiplicados, como se fossem apenas uma matriz. Também é possível multiplicar apenas os elementos de cada matriz individualmente com o parâmetro axis=1.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

matriz = np.prod([array1, array2], axis=1)

print(matriz)
Nesse exemplo, o retorno é uma lista com o resultado da multiplicação das duas matrizes individualmente. O primeiro valor da lista de retorno é o resultado da multiplicação dos elementos da primeira matriz e o segundo valor é o resultado da multiplicação dos elementos da segunda matriz.

Produto acumulativo

Para trabalhar com produto acumulativo a biblioteca numpy disponibiliza a função cumprod. A função cumprod vai receber uma matriz e retornar uma matriz com o mesmo numero de elementos da matriz que receber. Cada elemento dessa matriz é o produto acumulado dos elementos anteriores. Por exemplo, na lista [1, 2, 3, 4], o resultado seria uma matriz com os valores 1, 2, 6 e 24.
Exemplo
import numpy as np

array = np.array([1, 2, 3, 4])

matriz = np.cumprod(array)

print(matriz)

Diferença

Na biblioteca numpy temos a função diff. A função diff retorna uma lista com o resultado da diferença entre um elemento e o seu antecessor, com exceção do primeiro elemento. Por exemplo, a diferença entre os elementos da lista [1, 2, 3, 4] é [1, 1, 1]. Isso porque 2-1=1, 3-2=1 e 4-3=1.
Exemplo
import numpy as np

array = np.array([1, 2, 3, 4])

matriz = np.diff(array)

print(matriz)
Também podemos pegar o resultado da diferença e tirar a diferença. Por exemplo, no exemplo anterior o resultado da diferença foi [1, 1, 1]. E se quiséssemos tirar a diferença desse resultado? Simples. Precisaríamos apenas adicionar o parâmetro n=2 na função diff.
Exemplo
import numpy as np

array = np.array([1, 2, 3, 4])

matriz = np.diff(array, n=2)

print(matriz)
O resultado desse exemplo é [0, 0] pois 1-1=0, 1-1=0.

Somatório com NumPy

Somatório com NumPy


Qual é a diferença entre o somatório e a adição? Com o somatório um número infinitos de elementos podem ser somados, diferente da adição que soma apenas dois elementos.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

matriz = np.add(array1, array2)

print(matriz)
Nesse exemplo temos a soma dos números na vertical, como se fosse uma tabela. Por isso o resultado é uma matriz com os elementos 5, 7 e 9. No somatório todos os elementos são somados.
Para realizar uma somatória de todos os elementos de uma matriz a biblioteca numpy disponibiliza a função sum. A função sum soma todos os elementos da matriz passada como argumento e retorna o resultado da soma dos elementos de todas as matrizes.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

matriz = np.sum([array1, array2])

print(matriz)
A função sum, por padrão, soma todos os elementos de uma matriz. Para mudar esse comportamento podemos passar o argumento axis=1. Assim cada matriz será somada individualmente. E a função sum vai retornar uma matriz com os resultados da soma dos elementos de cada matriz, individualmente.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

matriz = np.sum([array1, array2], axis=1)

print(matriz)

Soma acumulativa

Com a soma acumulativa a soma dos dois últimos elementos são somados com o elemento atual. Por exemplo, na matriz [1, 2, 3] o resultado seria 1, 3 e 6.
Para fazer uma somatória acumulativa a biblioteca numpy disponibiliza a função cumsum. A função cumsum recebe uma lista como argumento e retorna uma lista com a mesma quantidade de elementos da matriz de entrada.
Exemplo
import numpy as np

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

matriz = np.cumsum(array)

print(matriz)
Cada elemento da matriz resultado é a soma dos dois elementos anteriores na matriz de entrada.