Python - Matrice produit extérieur
Donné deux matrices
A: m * r
B: n * r
Je veux générer une autre matrice C: m * n
, avec chaque entrée C_ij
une matrice calculée par le produit extérieur de A_i
et B_j
.
Par exemple,
A: [[1, 2],
[3, 4]]
B: [[3, 1],
[1, 2]]
donne
C: [[[3, 1], [[1 ,2],
[6, 2]], [2 ,4]],
[9, 3], [[3, 6],
[12,4]], [4, 8]]]
Je peux le faire à l'aide de boucles, comme
for i in range (A.shape(0)):
for j in range (B.shape(0)):
C_ij = np.outer(A_i, B_j)
Je me demande Si il y a un vectorisées façon de faire ce calcul pour l'accélérer?
- Voulez-vous un 4D,
(m, n, r, r)
forme de tableau, ou voulez-vous un 2D,(m, n)
forme de tableau deobject
dtype où chaque élément est un autre tableau? Je recommande fortement la première option, mais votre description des sons plus proche de la seconde. - Désolé pour la confusion, mais je préfère la première, 4D
(m, n, r, r)
forme de tableau.
Vous devez vous connecter pour publier un commentaire.
NumPy ufuncs, comme
multiply
, ont unextérieur
méthode qui ne fait presque ce que vous voulez. Suivantes:produit un résultat tel que
temp[a, b, c, d] == A[a, b] * B[c, d]
. Vous souhaitezC[a, b, c, d] == A[a, c] * B[b, d]
. Leswapaxes
appel réorganisetemp
à mettre dans l'ordre que vous souhaitez.Le Einstein de la notation exprime ce problème bien
Utilisation numpy;
Une fois que vous avez le résultat souhaité, vous pouvez utiliser
numpy.reshape()
à la moisissure dans presque n'importe quelle forme que vous voulez;np.outer(A, B)
puis la diviser en petites grilles?[[3, 1], [6, 2]]
,[[1, 2], [2, 4]]
,[[9, 3], [12, 4]]
et[[3, 6], [4, 8]]
.