Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Multiplicação entre np.arrays

Oi! Estava fazendo uns testes com multiplicações de arrays e acabei percebendo que não seguem as mesmas regras de multiplicação de matriz, mas não consegui entender qual o critério.

Fiz os seguintes testes:

TESTE 1: In: A = np.array([[1,2,3],[4,5,6]]) C = np.array([[1,2,3],[2,2,2]]) B = A*C B

Out: array([[1, 4, 9], [8, 10, 12]])

Observei que nesse Teste 1, onde os arrays possuem o mesmo shape (2,3), os elementos das posições correspondentes de A e de C foram multiplicados um pelo outro:

Primeira linha: [1* 1 , 2* 2, 3* 3 ] -> [1 ,4, 9] Segunda linha: [4* 2, 5* 2, 6* 2] -> [8, 10, 12]

TESTE 2: In: A = np.array([[1,2,3],[4,5,6]]) C = np.array([1,2,3]) B = A*C B

Out: array([[ 1, 4, 9], [ 4, 10, 18]])

Já no teste 2, em foi feita a multiplicação de um array (2,3) com um (3, ), verifiquei que essa única linha do C multiplicou tanto a primeira como a segunda linha de A:

Primeira linha: [1 * 1 , 2* 2, 3 * 3] -> [1, 4, 9] Segunda linha: [4* 1, 5* 2, 6 * 3] -> [4, 10, 18]

Qual o critério/regra de multiplicação entre np.arrays?

2 respostas

Não sei se ficou clara minha pergunta, mas aguardo retorno. Qualquer coisa posso tentar escrever de outra maneira.

Obrigada.

solução!

Oi Vivian,

A operação que você está fazendo leva a uma multiplicação de elemento a elemento dos arrays quando eles têm o mesmo shape. Quando eles tem shapes diferentes a numpy faz o que chamamos de broadcasting. Ela tenta fazer a multiplicação elemento a elemento usando a dimensão do outro array que torna essa operação coerente. No seu teste 2 foi realizada a operação de multiplicação dos elementos do array C pelos elementos da linha 1 do array A e posteriomente pelos elementos da linha 2 do array A. Isso porque o número de colunas dos dois arrays era igual.

Quanto a multiplicação da matemática você pode fazer usando a função .dot. Exemplo:

import numpy as np

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

C = np.dot(A, B)

print(C)

Isso deve retornar:

[[19 22]
 [43 50]]