Pagina 1 di 1

Domanda per codice

Inviato: 8 gen 2010, 21:17
da MarioBelotti
ho un vettore esa= [0 0 0 0 0 0 0 5 0 0 0 0 2 4 0 0]
se voglio creare un vettore solo con i numeri non uguali a zero

for i=1:1:length(a)
if a(i)>0
na=[a(i)]
end
end

è giusto perche mi crea il vettore ma non toglie gli zeri

Re: Domanda per codice

Inviato: 8 gen 2010, 22:45
da phylum
prova un piu' semplice nz = nonzeros(esa)

Re: Domanda per codice

Inviato: 8 gen 2010, 22:48
da MarioBelotti
il comando find ti da gli indici degli elementi diversi da 0 a me servirebbero gli elementi.

Re: Domanda per codice

Inviato: 9 gen 2010, 14:35
da maxstu
MarioBelotti ha scritto:for i=1:length(a)
if a(i)>0
na=[a(i)]
end
end


Sinceramente scritto così non mi sembra che crei un vettore ma una variabile na che alla fine del ciclo varrà na = 4. :?:

Così potrebbe essere(fa un po' schifo ma per capire è ok):

Codice: Seleziona tutto

a= [0 0 0 0 0 0 0 5 0 0 0 0 2 4 0 0];
na = zeros(1,length(a));
j = 0;
for i=1:length(a)
     if a(i)>0
         j = j+1;
         na(j) = a(i);
     end
end
nonzer_vector = na(1, 1:j);


Ma non conviene utilizzare tale codice se già hai una funzione pronta all'uso come nonzeros.

La funzione find non ti serve perché se al vettore esa applichi nonzeros come dice phylum ti ritorna già un vettore di dimensioni pari al numero di elementi non nulli e con gli elementi non nulli in ordine.

Quindi non capisco perché utilizzi find?