[MatLab]
salve a tutti,
ho un problema che non riesco a risolvere:
ho una matrice 1*20000 di elementi esclusivamente 0 e 1.
devo riuscire a creare una struttura che mi conti il numero di 0 e il numero di 1 consecutivi.
ad esempio se la mia riga fosse del tipo:
0001111000011001100011000.........
devo ottenere una struttura che mi restituisca
numero di 0 numero di 1
3 4
4 2
2 2
3 2
3
e cosi via..
qualcuno saprebbe aiutarmi??
grazie mille!
ho un problema che non riesco a risolvere:
ho una matrice 1*20000 di elementi esclusivamente 0 e 1.
devo riuscire a creare una struttura che mi conti il numero di 0 e il numero di 1 consecutivi.
ad esempio se la mia riga fosse del tipo:
0001111000011001100011000.........
devo ottenere una struttura che mi restituisca
numero di 0 numero di 1
3 4
4 2
2 2
3 2
3
e cosi via..
qualcuno saprebbe aiutarmi??
grazie mille!
Risposte
numero di 0
3
4
2
3
3
numero di 1
4
2
2
2
3
4
2
3
3
numero di 1
4
2
2
2
a me viene in mentre di creare un contatore con un ciclo if che si incrementa se trova un valore uguale al precedente, altrimenti stampa il risultato e si azzera per ricominciare col nuovo simbolo
e come lo implementeresti?
l'idea di base è questa, supponiamo che il vettore si chiama v
ovviamente si può lavorarci per migliorarlo, ad esempio si possono passare ad un altro vettore i valori di k e stamparli tutti assieme alla fine
k=1 %inizializzo il contatore for i=2:20000 if v(i)==v(i-1) k=k+1; else k k=1; end end
ovviamente si può lavorarci per migliorarlo, ad esempio si possono passare ad un altro vettore i valori di k e stamparli tutti assieme alla fine
Un modo potrebbe essere il seguente:
% vettore iniziale A = [0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 0]; % trova gli indici in cui il valore cambia % diff(A) vale 1 o -1 quando i due valori successivi sono diversi.. d = find(abs(diff(A))); % calcola la lunghezza di ogni sottostringa res = [d(1) diff(d)];
apatriarca grazie l'esempio funziona perfettamente.
ho solo due domande:
1. posso ottenere un res solo per gli zeri e un res solo per gli 1? perché cosi mi mette nella matrice res sia il numero di 0 che il numero di 1.
2. potresti spiegarmi meglio come funziona diff(A)??
scusami lo so che sono un mezzo disastro ma sn alle prime armi con matlab e quindi molte funzioni mi risultano sconosciute.
grazie mille cmq!!
ho solo due domande:
1. posso ottenere un res solo per gli zeri e un res solo per gli 1? perché cosi mi mette nella matrice res sia il numero di 0 che il numero di 1.
2. potresti spiegarmi meglio come funziona diff(A)??
scusami lo so che sono un mezzo disastro ma sn alle prime armi con matlab e quindi molte funzioni mi risultano sconosciute.
grazie mille cmq!!
diff(A) è il vettore delle differenze tra valori consecutivi. Corrisponde al vettore che si ottiene facendo il seguente calcolo:
Siccome i due valori si scambiano tra di loro, è sufficiente separare i valori con indici pari e dispari. Per associare uno dei due array agli 1 e l'altro agli 0 devi però testare con quale valore inizia la sequenza.
A[2:end] - A[1:(end-1)]
Siccome i due valori si scambiano tra di loro, è sufficiente separare i valori con indici pari e dispari. Per associare uno dei due array agli 1 e l'altro agli 0 devi però testare con quale valore inizia la sequenza.
grazie ancora.
provero' a trovare un modo per separare i valori di zero e uno magari tramite le funzioni odd e even anche perché conosco solo quelle.
provero' a trovare un modo per separare i valori di zero e uno magari tramite le funzioni odd e even anche perché conosco solo quelle.