Criar uma matriz de produtos externos em numpy
Eu tenho uma matriz de n vetores de comprimento m. Por exemplo, comn = 3, m = 2:
x = array([[1, 2], [3, 4], [5,6]])
Eu quero pegar o produto externo de cada vetor consigo mesmo, depois concatená-los em uma matriz de matrizes quadradas de forma(n, m, m). Então, para ox
acima eu iria ficar
array([[[ 1, 2],
[ 2, 4]],
[[ 9, 12],
[12, 16]],
[[25, 30],
[30, 36]]])
Eu posso fazer isso com umfor
loop como assim
np.concatenate([np.outer(v, v) for v in x]).reshape(3, 2, 2)
Existe uma expressão numpy que faz isso sem o Pythonfor
loop?
Pergunta bônus: como os produtos externos são simétricos, não precisom x m operações de multiplicação para calculá-las. Posso obter essa otimização de simetria de numpy?