Ich versuche, den folgenden MATLAB Betrieb vektorisieren:Erstellen Sie einen Null-gefüllten 2D-Array mit Einsen an durch einen Vektor indiziert Positionen
ein Spaltenvektor mit Indexen, ich mag eine Matrix mit dem gleichen Anzahl der Zeilen der Spalte und eine feste Anzahl von Spalten. Die Matrix wird mit Nullen initialisiert und enthält Einsen in den von den Indizes angegebenen Positionen . Hier
ist ein Beispiel für das Skript, das ich schon geschrieben habe:
y = [1; 3; 2; 1; 3];
m = size(y, 1);
% For loop
yvec = zeros(m, 3);
for i=1:m
yvec(i, y(i)) = 1;
end
Das gewünschte Ergebnis ist:
yvec =
1 0 0
0 0 1
0 1 0
1 0 0
0 0 1
Ist es möglich, das gleiche Ergebnis ohne die for-Schleife zu erreichen ? Ich habe versucht, etwas wie folgt:
% Vectorization (?)
yvec2 = zeros(m, 3);
yvec2(:, y(:)) = 1;
aber es funktioniert nicht.
Besonders gefällt mir der zweite Ansatz :) – Muffo
Auch erscheint es 'yvec' hat Anzahl der Spalten gleich dem Maximum von 'Y', so dass für die zweiten Ansatz können Sie eine verallgemeinerte Version als 'yvec = bsxfun (@eq, 1: max (y), y)' haben. – Divakar
Oder, nur in der Oktave, '(1: 3) == y', was Approach 2 mit [Broadcasting] ist (https://www.gnu.org/software/octave/doc/v4.0.1/Broadcasting.html) . – ederag