Matlab

di il
1 risposte

Matlab

Salve a tutti, sono nuovo del forum e dell'uso di matlab.Volevo chiedervi questo:
ho un vettore ux2, per esempio [1 2]
ed una matrice del tipo
1 2
1 3
1 4
2 1
2 4
3 2
4 1
4 3

Le mie domande sono due.
1) come faccio a far apparire le sole righe della matrice che possiedono i valori di ux2 sulla prima colonna?
ovvero
1 2
1 3
1 4
2 1
2 4

2) come faccio a far apparire le sole righe della matrice che possiedono i valori di ux2 su entrambe le colonne?
ovvero
1 2
1 3
1 4
2 1
2 4
3 2
4 1

Grazie davvero per l'aiuto.

1 Risposte

  • Re: Matlab

    Alcuni suggerimenti per la soluzione, basati sui dati di input riportati nella domanda
    Hope this helps.

    a=[1 2];
    b=[1 2
    1 3
    1 4
    2 1
    2 4
    3 2
    4 1
    4 3];
    %
    % Prima domanda: possibile approccio
    %
    tmp=b; % copia della matrice di origine che può quindi essere modificata
    rr=[]; % inizializzazione
    % loop sugli elementi del vettore a
    for i=1:length(a)
    % ricerca del valore dell'i-esimo elemento di a tra gli elementi della
    % colonna 1 di tmp (copia di b)
    % in r viene "ritornato" il numero della che contiene l'"i-esimo" elento
    % di a
    [r,c,v]=find(tmp(:,1) == a(i));
    % ad ogni iterazione i valori di r vengono aggiunti al vettore rr che al
    % termine del loop conterrà gli indici delle righe che contenfono i valori
    % del vettore a nella prima colonna
    rr=[rr;r];
    % al termine di ogni iterazione, le righe che contengono i valori cercati
    % vengono cancellate
    tmp(r,:)=NaN;
    end
    % Al termine del loop, in rr sono memorizzati gli indice delle righe
    % cercate. Nella matrice finale "m" vengono copiati i valori delle righe
    % cercate
    m=b(sort(rr),:)
    %
    % Seconda domanda
    %
    % L'approccio che può essere seguito è esattamente lo stesso, l'unica
    % differenza è nell'uso della funzione "find", in questo caso la ricerca
    % viene effettuata su tutte le colonne di tmp (copia di b), mentre nel caso
    % precedente, veniva effettuata solo sulla prima colonna
    %
    tmp=b;
    rr=[];
    for i=1:length(a)
    [r,c,v]=find(tmp == a(i));
    rr=[rr;r];
    tmp(r,:)=NaN;
    end
    m1=b(sort(rr),:)
    clear tmp
Devi accedere o registrarti per scrivere nel forum
1 risposte