Il modo più semplice consiste nello sfruttare le funzionalità di
indexing] di MatLab.
% Creazione del vettore "a" di esempio
a=randi([0 1],1,10)
% Creazione del vettore "c" di esempio
b=randi(10,1,10)
% Assegnazione dei valori al vettore "c"
c=b(a == 1)
% Soluzione alternativa
c=b(logical(a))
Nell'esempio:
(a == 1)
ritorna gli indici delle posizioni del vettore "a" nel quale vi sono degli "1"
c=b(a == 1)
identifica gli elementi del vettore "b" corrispondenti agli indici-posizione e ne assegna il valore al vettore "c"
Nella seconda soluzione, i valori di "a" vengono convertiti in valori logici,
logical(a)
in questo caso, la selezione dei valori di "b" viene effettuato valutando quale sia la posizione dei valori "true" (1).
c=b(logical(a))
Per i dettagli sull'indexing:
http://uk.mathworks.com/help/matlab/learn_matlab/array-indexing.html
http://uk.mathworks.com/company/newsletters/articles/matrix-indexing-in-matlab.html
http://uk.mathworks.com/help/matlab/math/matrix-indexing.html
Se invece vuoi usare un ciclo "for" (scelta non consigliata) devi utilizzare un contatore per "contare" che verrà incrementato ogni volta che viene individuato un "1": nella tua implementazione del ciclo for utilizzi l'indice "i" per identificare la locazione del vettore "c" nel quale scrivere il valore, ma "i" viene incrementato ad ogni iterazione, quindi anche quando viene individuato uno "0".
MatLab alloca dinamicamente la memoria ad ogni iterazione e se, in una data iterazione non scrivi niente all'interno dell'"i-esima" locazione del vettore, questa viene automaticamente inizializzata a "0".
Questo è il motivo per il quale il vettore "c" contiene degli "0".
Devi, quindi, modificare il codice così:
cnt=0;
for i=1:length(a)
if(a(i))
cnt=cnt+1;
c(cnt)=b(i);
end
end