[PROBLEMA] Matlab, eliminazione righe e calcoli

di il
3 risposte

[PROBLEMA] Matlab, eliminazione righe e calcoli

Salve a tutti,

cerco di risolvere questo problema da varie ore ma non ci riesco.
Ho una matrice di numeri che ha sempre un fixed numero di righe e colonne.

Quello che necessito è mettere degli 0 o dei NaN su intere righe che vorrei impostare da una variabile. L'output deve essere una matrice identica ma avente degli zeros sulle righe che ho bisogno di eliminare.

Questo è il passo uno... il passo due sarebbe far fare un calcolo(una funzione che già possiedo) tramite un ciclo for per tutte le righe fino a quando non incontra una riga con gli zeros. Successivamente il ciclo for deve saltare gli zeros e prendere l'intervallo tra le righe e gli zeros successivi.

Spero di essermi spiegato bene.. grazie anticipatamente... Spero che mi possiate aiutare

3 Risposte

  • Re: [PROBLEMA] Matlab, eliminazione righe e calcoli

    Per inserire degli "0" o "NaN" in tutte le colonne di un a riga di una matrice puoi utilizzare le funzionalità di indicizzazione di MatLab e le funzioni "zeros" o "nan" che generano vettori o matrici di "0" o "NaN".
    % Creazione di una matrice di esempio
    m=randi(10,7,5)
    % Identificazione del numero di righe e colonne della matrice
    [r,c]=size(m);
    % Definizione della varaibile che contiene il numero della riga della
    % matrice che si vuole sostituire con 0 o NaN
    sel_row=3;
    % Passo 1: creazione di una nuova matrice con 0 o NaN nella riga "sel_row"
    m1=m;
    m2=m;
    m1(sel_row,:)=zeros(1,c)
    m2(sel_row,:)=nan(1,c)
    Per quanto riguarda il Passo 2, non è molto chiaro cosa vuoi fare, ma sono abbastanza sicuro che possa essere fatto senza l'utilizzo di "ciclo for".

    In particolare, se il problema nel Passo 2 è identificare le righe con tutti "0" o "NaN", sembrerebbe che il Passo 1 non sia necessario.

    Anche volendo utilizzare un "ciclo for", dal momento che, a quanto sembra, conosci in anticipo quali siano le righe da "saltare", basterebbe inserire nel "ciclo for", ad esempio, un semplice "if" che identifichi le righe da saltare (o sa non saltare).

    Se pubblichi qualche informazione aggiuntiva sulla funzione che utilizzi per il calcolo nel Passo 2, credo si possa "fare qualcosa".

    Hope this helps.
  • Re: [PROBLEMA] Matlab, eliminazione righe e calcoli

    Grazie mille..
    allora cerco di spiegarmi meglio:

    ho questa funzione in un ciclo for:

    windowl = 2048;
    clear indices
    indices = 1:windowl:length(newsig);
    clear xx, clear yy, clear XX, clear YY;

    for i = 1:size(indices,2)-1
    clear newsig2
    newsig2 = newsig(:,indices(i):indices(i+1));
    [xx,yy] = XX_est(newsig2,1,5);
    XX(:,i) = xx;
    YY(:,i) = yy;
    end

    praticamente mi spezzetta il segnale in campioni e me lo scrive su XX.

    Io ho dei segnali che hanno 118 righe e dovrei fare un calcolo su gruppi di queste righe.

    Praticemente vorrei inserire i canali(righe) da eliminare e far fare a questa funzione tutte le possibili combinazioni di calcolo (per canali che si succedono)

    Ad esempio, dal canale 1:12 , vorrei eliminare il canale 6 e la funzione deve farmi il calcolo da 1 a 5,non includere il 6 e saltarlo per andare da 7 a 12 finquando non arriva all'ultima riga.. che è sempre la 118esima.

    Grazie mille veramente!!!
  • Re: [PROBLEMA] Matlab, eliminazione righe e calcoli

    Non è chiaro come sia definita la matrice "newsig" e quali operazioni vuoi fare su di essa.

    Nella domanda fai riferimento a "118" righe.

    Quante righe ha la matrice "newsig"?

    Quelli che chiami "canali" sono definiti sulle righe o sulle colonne della matrice "newsig"?

    Nel loop che hai scritto:
    newsig2 = newsig(:,indices(i):indices(i+1));
    [xx,yy] = XX_est(newsig2,1,5);
    XX(:,i) = xx;
    YY(:,i) = yy;
    
    i campioni vengono presi "sulle colonne": newsig2 ha lo stesso numero di righe di "newsig" e 2048 colonne.

    Qual è la relazione tra questo e le 188 righe alle quali fai riferimento?
Devi accedere o registrarti per scrivere nel forum
3 risposte