sto cercando vectorize la seguente operazione MATLAB:creare una matrice 2D zero riempito con quelli nelle posizioni indicizzate da un vettore
Dato un vettore colonna con indici, voglio una matrice con lo stesso numero di righe della colonna e un numero fisso di colonne. La matrice viene inizializzata con zeri e contiene quelli nelle posizioni specificati dagli indici.
Ecco un esempio dello script che ho già scritto:
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
Il risultato desiderato è:
yvec =
1 0 0
0 0 1
0 1 0
1 0 0
0 0 1
E 'possibile ottenere lo stesso risultato senza il ciclo for ? Ho provato qualcosa di simile:
% Vectorization (?)
yvec2 = zeros(m, 3);
yvec2(:, y(:)) = 1;
ma non funziona.
mi piace particolarmente il secondo approccio :) – Muffo
Inoltre sembra 'yvec' ha numero di colonne pari al massimo di' y', così per il secondo approccio è possibile avere una versione generalizzata come 'yvec = bsxfun (@eq, 1: max (y), y)'. – Divakar
Oppure, solo in ottava, '(1: 3) == y', che è l'approccio 2 con [broadcasting] (https://www.gnu.org/software/octave/doc/v4.0.1/Broadcasting.html) . – ederag