Pagina 1 di 1

confronto tra vettori MATLAB

MessaggioInviato: 23 feb 2013, 20:31
da catta
Salve a tutti,
avrei bisogno di un consiglio in merito a quanto segue.
Ho un vettore es. a=[ 2 6 8 ] e un vettore b=[ 3 4 2 9 1 6 7 8 ] e in sostanza vorrei che nel vettore b venissero tolti gli elementi che sono nel vettore a, e magari sostituiti con NaN, ovvero ottenere: b=[3 4 NaN 9 1 NaN 7 NaN].
Volevo sapere se ci fosse una funzione che possa fare questo. Potrei scrivere una piccola funzione. Il problema è che le dimensioni dei due vettori cambiano sempre siccome sono all'interno di un ciclo for. Grazie a chiunque possa darmi una mano:)

Re: confronto tra vettori MATLAB

MessaggioInviato: 23 feb 2013, 21:23
da DirtyDeeds
Usa la funzione setdiff.

Per esempio (non testato)

Codice: Seleziona tutto
[c,ib] = setdiff(b,a);
d = NaN(size(b));
d(ib) = c;

Re: confronto tra vettori MATLAB

MessaggioInviato: 24 feb 2013, 12:13
da catta
Grazie, in effetti è la funzione che fa per me, non la conoscevo. L'unica cosa che mi lascia perplesso sono come vengono dati i valori in uscita alla funzione. es
Codice: Seleziona tutto
a = [3 6 2 1 5 1 1]; b = [2 4 6 3];
>> [C,i] = setdiff(a,b)


restituisce:

Codice: Seleziona tutto
C= 1 5
i=1 7


ora se non ho capito male, setdiff(a,b) trova gli elementi di a che non sono contenuti in b, nell'esempio appunto 1 e 5, non capisco però come indice i=1 7. Mi sarei aspettato più un i=4 5 6 7 ovvero gli indici di a corrispondentia valori che non sono contenuti nel vettore b.

Re: confronto tra vettori MATLAB

MessaggioInviato: 24 feb 2013, 12:31
da DirtyDeeds
Sei sicuro del vettore i che hai riportato? Con i valori dell'esempio dovresti avere
catta ha scritto:non capisco però come indice i=1 7


Uhm, sei sicuro dell'indice? A me sembra che dovrebbe essere i = [7 5].

catta ha scritto:Mi sarei aspettato più un i=4 5 6 7 ovvero gli indici di a corrispondentia valori che non sono contenuti nel vettore b.


Quelle funzioni trattano i vettori come insiemi, quindi, per esempio, [1 1] e [1 1 1 1 1] sono equivalenti al vettore [1]. Se hai bisogno di mantenere i valori ripetuti, bisogna trovare un'altra soluzione: non avendo matlab installato, però, non riesco a fare prove.

Re: confronto tra vettori MATLAB

MessaggioInviato: 24 feb 2013, 12:46
da catta
si scusa mi son sbagliato , non so perché ho scritto 1 7 il risultato degli indici è 7 5 :-)
Mi è anche più chiaro il discorso che siano funzioni che trattano il vettore come insieme, viene spiegato il perché i valori ripetuti non siano considerati. grazie ancora, approfondirò comunque l'argomento!!