[MATLAB] conteggio occorrenze di un vettore
Intanto porgo un saluto a tutti e grazie pe l'eventuale aiuto che mi darete.
Il mio problema è questo dato un vettore v[1,1,1,2,2,2,3,4,5,8,8]:
- creare una funzione che conta i numeri uguali e memorizzarli in un altro vettore o eventualmente una matrice
- dato un altro vettore u[1,2,2,3,3,3,4,5,5,6] aggiornare il conteggio e memorizzarlo nel vettore creato nel punto precedente
io ho fatto cosi
ma non riesco a memorizzarlo in un array e poi se gli passo un altro array mi azzera tutto

Il mio problema è questo dato un vettore v[1,1,1,2,2,2,3,4,5,8,8]:
- creare una funzione che conta i numeri uguali e memorizzarli in un altro vettore o eventualmente una matrice
- dato un altro vettore u[1,2,2,3,3,3,4,5,5,6] aggiornare il conteggio e memorizzarlo nel vettore creato nel punto precedente
io ho fatto cosi
function y=conta_vettore(x) n=length(x); a=[]; conta=0; valore=max(x); for j=0 : valore for k=1:n if(x(k)==j) conta=conta+1; a=[x(k),conta]; end end y=a; conta=0; end end
ma non riesco a memorizzarlo in un array e poi se gli passo un altro array mi azzera tutto



Risposte
Se ho ben capito il codice, noto una cosa strana..
"for j=0 : valore ", cioe' tu fai il ciclo da 1 fino al valore massimo presente in tabella ?
E' cosi' ?
"for j=0 : valore ", cioe' tu fai il ciclo da 1 fino al valore massimo presente in tabella ?
E' cosi' ?
"Umby":
Se ho ben capito il codice, noto una cosa strana..
"for j=0 : valore ", cioe' tu fai il ciclo da 1 fino al valore massimo presente in tabella ?
E' cosi' ?
si perchè la mia idea è quella di creare un vettore che abbia lunghezza pari al valore massimo del vettore cosi evito di dare una lunghezza fissa al vettore che poi eventualmete verrà cambiata
non so se è un idea giusta ditemi voi.
Per me è assurdo....
Immagina che hai il tuo vettore composto cosi':
v[14544,1855221,7446466,9898,2,46546,74114144,55555555]:
Immagina che hai il tuo vettore composto cosi':
v[14544,1855221,7446466,9898,2,46546,74114144,55555555]:
"Umby":
Per me è assurdo....
Immagina che hai il tuo vettore composto cosi':
v[14544,1855221,7446466,9898,2,46546,74114144,55555555]:
beh allora come dovrei fare? Inoltre non sono io a dare in input il valore da conteggiare ma lo deve fare la funzione quindi ho trovato il valore massimo e poi ho fatto il for con il valore massimo
Nell'esempio del vettore che hai postato, i valori sono ordinati.
E' cosi' ?
Avendo il vettore ordinato il ciclo diventa molto semplice, quindi è importante sapere se lo è o meno..
E' cosi' ?
Avendo il vettore ordinato il ciclo diventa molto semplice, quindi è importante sapere se lo è o meno..
"Umby":
Nell'esempio del vettore che hai postato, i valori sono ordinati.
E' cosi' ?
Avendo il vettore ordinato il ciclo diventa molto semplice, quindi è importante sapere se lo è o meno..
si è ordinato ma poi se ho un vettore disordinato basta applicare il comando y=sort(x) e lo ordina il matlab stesso quindi su questo non c'è problema
"corel_86":
si è ordinato ma poi se ho un vettore disordinato basta applicare il comando y=sort(x) e lo ordina il matlab stesso quindi su questo non c'è problema
mbè, allora il problema dove è ?
devi scorrere sequenzialmente l'intero vettore fino alla fine .... e man mano decidi cosa fare.
Il problema è che non riesco a contare le occorrenze cioè avendo il vettore v=[1, 1, 1, 2, 2, 2, 3, 4, 5, 8, 8] il risultato deve essere un vettore che chiamo conto=[3 , 3 , 1, 1, 1, 0, 0, 2]
dove quei numeri sono
1 compare 3 volte nell'array
2 compare 3 volte nell'array
3 compare 1 volta nell'array
........................................
8 compare 2 volte nell'array
poi quando gli passo il vettore u[1,2,2,3,3,3,4,5,5,6] il vettore conto si aggiorna in questo modo
conto=[4, 5, 4, 2, 3, 1, 0, 2] il problema è che quando genero conto non mi si aggiorna.
dove quei numeri sono
1 compare 3 volte nell'array
2 compare 3 volte nell'array
3 compare 1 volta nell'array
........................................
8 compare 2 volte nell'array
poi quando gli passo il vettore u[1,2,2,3,3,3,4,5,5,6] il vettore conto si aggiorna in questo modo
conto=[4, 5, 4, 2, 3, 1, 0, 2] il problema è che quando genero conto non mi si aggiorna.
"corel_86":
Il problema è che non riesco a contare le occorrenze cioè avendo il vettore v=[1, 1, 1, 2, 2, 2, 3, 4, 5, 8, 8] il risultato deve essere un vettore che chiamo conto=[3 , 3 , 1, 1, 1, 0, 0, 2]
dove quei numeri sono
1 compare 3 volte nell'array
2 compare 3 volte nell'array
3 compare 1 volta nell'array
........................................
8 compare 2 volte nell'array
sei certo che devi anche inserire lo 0 in posizione 6 e 7 ?
Il testo ti chiede di contare i numeri che si ripetono.... solo quelli...
Giusto qualche linea di codice (spero comprensibile):
Ho posizionato direttamente nel codice il vettore per questioni di pigrizia.
Leggo l'intero vettore (ordinato) e man mano che leggo compongo il secondo vettore (matrice a 2 dimensioni), ogni qualvolta trovo un valore diverso incremento il k, e posiziono la frequenza ad 1, se invece trovo lo stesso valore aggiorno la frequenza (+1)
alla fine visualizzo il vettore composto.
INIZIO SECTION. MOVE 1 TO V(1) V(2) V(3) MOVE 2 TO V(4) V(5) V(6) MOVE 3 TO V(7) MOVE 4 TO V(8) MOVE 5 TO V(9) MOVE 8 TO V(10) V(11) * move low-value to servizio move 0 to k perform varying i from 1 by 1 until v(i) = 0 if v(i) not = servizio add 1 to k move v(i) to fq (k, 1), servizio move 1 to fq (k, 2) else add 1 to fq (k, 2) end-if end-perform. * display message box fq(1, 1) fq(2, 1) fq(3, 1) fq(4, 1) fq(5, 1) fq(6, 1) newline fq(1, 2) fq(2, 2) fq(3, 2) fq(4, 2) fq(5, 2) fq(6, 2). EX-INIZIO. EXIT SECTION.
Ho posizionato direttamente nel codice il vettore per questioni di pigrizia.
Leggo l'intero vettore (ordinato) e man mano che leggo compongo il secondo vettore (matrice a 2 dimensioni), ogni qualvolta trovo un valore diverso incremento il k, e posiziono la frequenza ad 1, se invece trovo lo stesso valore aggiorno la frequenza (+1)
alla fine visualizzo il vettore composto.
Il risultato è questo:
Nella prima riga ci sono i valori
Nella seconda le frequenze
Nella prima riga ci sono i valori
Nella seconda le frequenze

grazie Umby ho risolto il mio problema