Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Shiftare un array in Matlab

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] Shiftare un array in Matlab

Messaggioda Foto Utentecatta » 2 feb 2013, 11:24

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!!!
Avatar utente
Foto Utentecatta
5 3
New entry
New entry
 
Messaggi: 51
Iscritto il: 9 ott 2008, 11:36

2
voti

[2] Re: Shiftare un array in Matlab

Messaggioda Foto Utentedimaios » 2 feb 2013, 12:25

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);
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[3] Re: Shiftare un array in Matlab

Messaggioda Foto Utentecatta » 2 feb 2013, 16:38

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
Avatar utente
Foto Utentecatta
5 3
New entry
New entry
 
Messaggi: 51
Iscritto il: 9 ott 2008, 11:36

0
voti

[4] Re: Shiftare un array in Matlab

Messaggioda Foto Utentecatta » 2 feb 2013, 17:17

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
Avatar utente
Foto Utentecatta
5 3
New entry
New entry
 
Messaggi: 51
Iscritto il: 9 ott 2008, 11:36

1
voti

[5] Re: Shiftare un array in Matlab

Messaggioda Foto Utentedimaios » 2 feb 2013, 17:50

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 ];
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[6] Re: Shiftare un array in Matlab

Messaggioda Foto Utentecatta » 2 feb 2013, 18:26

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 ];
Avatar utente
Foto Utentecatta
5 3
New entry
New entry
 
Messaggi: 51
Iscritto il: 9 ott 2008, 11:36

2
voti

[7] Re: Shiftare un array in Matlab

Messaggioda Foto Utentedimaios » 2 feb 2013, 18:30

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]
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[8] Re: Shiftare un array in Matlab

Messaggioda Foto Utentecatta » 2 feb 2013, 20:45

si si in effetti l'esempio poteva trarre in inganno, comunque avevo capito che erano gli indici, grazie ancora!!
Avatar utente
Foto Utentecatta
5 3
New entry
New entry
 
Messaggi: 51
Iscritto il: 9 ott 2008, 11:36

0
voti

[9] Re: Shiftare un array in Matlab

Messaggioda Foto UtenteDirtyDeeds » 2 feb 2013, 22:21

Se ti interessa solo eliminare le ripetizioni, puoi anche utilizzare la funzione unique.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti