Pagina 1 di 1
Shiftare un array in Matlab

Inviato:
2 feb 2013, 11:24
da catta
Ciao a tutti,
volevo avere un consiglio su una cosa che penso sia decisamente semplice ma che non riesco a implementare,
Dovrei semplicemente shiftare a destra o sinistra un vettore nel momento in cui si verifica una determinata condizione. esempio a=[1 2 3 4 5 6 6 7 ], devo shiftare a sx a se vengono trovati due elementi uguali consecutivi ( i due 6 per intenderci) , quindi vorrei come risultato a=[1 2 3 4 5 6 7 ]. volevo sapere se ci fosse una funzione gia implementata in Matlab per fare questa semplice operazione senza bisogno di scrivere il semplice algoritmo.
Grazie!!!
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 12:25
da dimaios
Ce ne sono diversi di metodi ma secondo me uno dei più eleganti ed efficienti è il seguente :
- Codice: Seleziona tutto
a=[1 2 3 4 5 6 6 7 ];
b=a([1,diff(a)]~=0);
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 16:38
da catta
Grazie 1000, dunque la funzione "diff" fa la differenza di ognì elemento con il suo adiacente e se questo è uguale a zero shifta di un a sinistra corretto? grazie ancora
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 17:17
da catta
già che ci sono ne approfitto, il codice che mi hai scritto prima (perfettamente funzionante) fa lo shift solo se si verifica una certa condizione corretto?? se invece volessi fare uno shift a prescindere da una certa condizione? es a=[1 2 3 4 5 6 7 8 ] shiftarlo a sx/dx di 2,3.. posti? grazie ancora
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 17:50
da dimaios
Non capisco bene cosa intendi.
Se vuoi eliminare un numero qualsiasi di elementi dello stesso tipo il comando è il medesimo :
Es.
- Codice: Seleziona tutto
a = [1 2 2 2 2 2 3 4 5 6 6 6 6 6 6 6 6 7 ];
b=a([1,diff(a)]~=0);
Fornisce come risultato :
- Codice: Seleziona tutto
b = [ 1 2 3 4 5 6 7 ];
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 18:26
da catta
intendevo fare un semplice shift. cioè
a=[1 2 3 4 5 ]; voglio shiftarlo di due posti a sinistra e ottenere a=[3 4 5 ];
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 18:30
da dimaios
Adesso la domanda è chiara.
Basta modificare l'indicizzazione del vettore.
- Codice: Seleziona tutto
a = [1 2 3 4 5 ];
b = a( 3:5 );
Oppure in generale :
- Codice: Seleziona tutto
Nshift = 3;
a = [1 2 3 4 5 ];
b = a( Nshift:length(a) );
ATTENZIONE : All'interno delle parentesi c'è l'intervallo degli indici e non quello dei valori come si potrebbe fraintendere dall'esempio in oggetto.
Era meglio fare questo esempio :
- Codice: Seleziona tutto
a = [7 28 32 41 56];
b = a( 3:5 );
con risultato
- Codice: Seleziona tutto
b = [ 32 41 56]
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 20:45
da catta
si si in effetti l'esempio poteva trarre in inganno, comunque avevo capito che erano gli indici, grazie ancora!!
Re: Shiftare un array in Matlab

Inviato:
2 feb 2013, 22:21
da DirtyDeeds
Se ti interessa solo eliminare le ripetizioni, puoi anche utilizzare la funzione
unique.