2017-03-24 1 views
-3

J'ai deux matrices, X de taille 800E3x45 et W de taille 45x35. Comment puis-je créer une matrice de taille 800E3x35 où chaque entrée est le produit scalaire d'une ligne de X et de la colonne W?MATLAB: Matrice de produits scalaires

+3

essayez avec 'M = X * W' – eyllanesc

+0

Pourquoi toutes vos questions sont-elles identiques? –

Répondre

1

Peut-être que ce n'est pas meilleure façon pour le code de lecture et la compréhension, mais vous pouvez le faire en vue vectorisé à l'aide de la prochaine formule:

res = cell2mat( arrayfun(@(y) arrayfun(@(x) dot(X(y,:), W(:,x)), 1:size(W,2)), ... 
       (1:size(X,1))', 'UniformOutput', false)) 

Explication:

  1. Nous devons prendre dot(X(y,:), W(:x)) - pour chaque ligne de X (y signifie numéro de ligne) on prend un point pour toutes les colonnes de W (x est la colonne de W)
  2. Utilisez arrayfun (intérieur) pour obtenir chaque colonne de W
  3. utilisation arrayfun (extern) pour obtenir chaque ligne de X.
  4. Nous obtenons résultat en réseau de cellules, donc permet de le convertir à la matrice numérique - utilisez `cell2mat »

post-scriptum Je pense qu'il est possible de trouver une solution plus élégante, en utilisant bsxfun mais c'est la première fois que je peux l'imaginer.