Comment faire pour calculer une rapide produit extérieur entre les deux matrices, dans Matlab?
J'ai deux n-par-m matrices, A
et B
. Je veux créer une nouvelle matrice C
qui est quelque chose comme:
for i = 1:n
C = C + outerProduct(A(i,:), B(i,:));
end
c'est à dire C
est une matrice de taille m x m, la somme de tous les produits extérieurs de l'lignes de A
et B
.
Est-il un moyen rapide de le faire sans une boucle for (étant donné que pour les boucles sont notoirement lent dans Matlab)?
Vous devez vous connecter pour publier un commentaire.
L'opération que vous effectuez (la somme de la ligne extérieure des produits) est l'équivalent de la multiplication d'une version transposée de
A
avecB
:Vous pouvez voir ce à l'aide de l'exemple suivant:
Avez-vous profilé votre
for
code de boucle et trouve qu'il est trop lent? Si non, faites le avant que vous passez trop de temps à l'agonie sur la boucle de pénalité.Votre
for
boucle n'est pas particulièrement mauvais, car vous boucle seulementn
fois, mais neO(n*m)
travail de chaque boucle. Puisque vous allez faire beaucoup de travail, à chaque itération, la boucle de pénalité ne frappe pas aussi fort. Le très mauvais les situations sont les boucles imbriquées, par exemple, si vous avez calculé à l'extérieur des produits avec imbriquéfor
les boucles de trop.Peut-être que je suis un malentendu, mais je crois que ce que vous cherchez est