Come effettuare lo skip di alcune righe della matrice

di il
1 risposte

Come effettuare lo skip di alcune righe della matrice

Buonasera a tutti. Ho un problema con una matrice su MATLAB.
In pratica si tratta di una matrice fatta da una sola colonna in cui ogni n righe ve ne sono 7 righe in cui sono allocati degli zeri. Vorrei ricreare una matrice da questa di partenza eliminando queste righe in cui sono presenti gli zeri... Stavo provando con il seguente codice:

A=xlsread('OUTPUT','D1:D9289'); %Dal file excel prende solo la quarta colonna
A(isnan(A))=0; %Rende i NaN un numero , in questo caso è posto pari a zero.
for i=1:length(A)
      if(A,i)==0
      B(i,1) = A(i+7,1);
      else
      B(i,1)=A(i,1);
end 
end
Tuttavia in questo modo non avviene questa eliminazione delle righe come richiesto... Spero che voi possiate aiutarmi.
Buona serata a tutti e grazie in anticipo.

1 Risposte

  • Re: Come effettuare lo skip di alcune righe della matrice

    La condizione che testi nel blocco "if" è impostata in modo errato, dovrebbe essere
    
    if(A(i) == 0)
    
    Se vuoi usare un ciclo "for" (e, come in molti casi in MatLab, non è necessario) puoi impostarlo come segue:
    
    cnt=0;
    for i=1:length(A)
        if(A(i) ~= 0)
            cnt=cnt+1;
            D(cnt)=A(i);
        end
    end
    
    Il modo più semplice, però, è sfruttare le proprietà di "indexing" di MatLab:
    
    B=A(A ~= 0)
    
    in questo modo vengono direttamente assegnate al vettore B i valori di A diversi da 0.

    Un'altra possibilità simile, ma non molto sensata, è:
    
    B=A;
    B(B==0)=[]
    
    in questo caso crei il vettore B come una copia del vettore A e poi cancelli (con "[]") i valori uguali a 0.
Devi accedere o registrarti per scrivere nel forum
1 risposte