2017-03-24 12 views
-3

Ich habe zwei Matrizen, X der Größe 800E3x45 und W der Größe 45x35. Wie kann ich eine Matrix der Größe 800E3x35 erstellen, wobei jeder Eintrag das Punktprodukt einer Zeile von X und Spalte W ist?MATLAB: Matrix der Punktprodukte

+3

versuchen Sie mit 'M = X * W' – eyllanesc

+0

Warum sind Ihre Fragen gleich? –

Antwort

1

Vielleicht ist das nicht bester Weg, zum Lesen und Code zu verstehen, aber man kann es in vektorisiert Ansicht mit der nächsten Formel tun:

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

Erläuterung:

  1. Wir brauchen dot(X(y,:), W(:x)) aufzunehmen - Für jede Zeile von X (y bedeutet Zeilennummer) wird Punkt für alle Spalten von W genommen (x ist Spalte von W)
  2. Verwenden Sie arrayfun (innen) zum Abrufen jeder Spalte von W
  3. Verwenden arrayfun (extern) für jede Zeile von X bekommen
  4. Wir führen erhalten in Zellenfeld, so läßt es zu numerischer Matrix konvertieren - verwenden `cell2mat‘

P. S. Ich denke, es gibt eine elegantere Lösung, smth mit bsxfun, aber das ist das erste, was ich mir vorstellen kann.