Como calcular o produto externo de duas matrizes A e B por linhas mais rapidamente em python (numpy)?
Digamos que temos duas matrizes A e B.
A tem a forma (r, k) e B tem a forma (r, l).
Agora, quero calcular o produto np.outer dessas duas matrizes por linha. Depois do produto externo, quero somar todos os valores no eixo 0. Portanto, minha matriz de resultados deve ter a forma (k, l).
Por exemplo: A forma de A é (4, 2), de B é (4, 3).
import numpy as np
A = np.array([[0, 7], [4, 1], [0, 2], [0, 5]])
B = np.array([[9, 7, 7], [6, 7, 5], [2, 7, 9], [6, 9, 7]])
# This is the first outer product for the first values of A and B
print(np.outer(A[0], B[0])) # This will give me
# First possibility is to use list comprehension and then
sum1 = np.sum((np.outer(x, y) for x, y in zip(A, B)), axis=0)
# Second possibility would be to use the reduce function
sum2 = reduce(lambda sum, (x, y): sum+np.outer(x, y), zip(A, B), np.zeros((A.shape[1], B.shape[1])))
# result for sum1 or sum2 looks like this:
# array([[ 175., 156., 133.], [ 133., 131., 137.]])
Estou me perguntando, existe uma solução melhor ou mais rápida? Porque quando eu tenho ex. duas matrizes com mais de 10.000 linhas, isso leva algum tempo.
Somente o uso da função np.outer não é a solução, porque np.outer (A, B) fornecerá uma matriz com a forma (8, 12) (não é isso que eu quero).
Precisa disso para retropropagação de redes neurais.