Próbuję wektorować następującą operację MATLAB:Tworzenie zerowej wypełnioną tablicę 2D z nich w pozycjach indeksowanych przez wektor
Biorąc wektor kolumnowy z indeksami, chcę matrycę z same liczba wierszy kolumny i stała liczba kolumn. Macierz jest inicjowana zerami i zawiera te w lokalizacji określone przez indeksy.
Oto przykład skryptu już napisałem:
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
Pożądany wynik jest:
yvec =
1 0 0
0 0 1
0 1 0
1 0 0
0 0 1
Czy to możliwe, aby osiągnąć ten sam efekt bez pętli for ? Próbowałem coś takiego:
% Vectorization (?)
yvec2 = zeros(m, 3);
yvec2(:, y(:)) = 1;
ale to nie działa.
Szczególnie podoba mi się drugim podejściu :) – Muffo
również wydaje 'yvec' ma liczbę kolumn równą max' y', więc dla drugie podejście możesz mieć uogólnioną wersję jako 'yvec = bsxfun (@eq, 1: max (y), y)'. – Divakar
Lub, tylko w oktawie, '(1: 3) == y', które jest podejściem 2 z [nadawanie] (https://www.gnu.org/software/octave/doc/v4.0.1/Broadcasting.html) . – ederag