Iterazione su file txt

di il
9 risposte

Iterazione su file txt

Buongiorno, avrei bisogno di aiuto per un iterazione su un file txt: ho una serie mySerie.txt (1000x1) alla quale vorrei applicare una funzione (myFunction) su finestre di dati di lunghezza crescente. Esempio, partendo dagli ultimi 350 punti (651:1000) applico la funzione e ottengo un risultato, poi stessa cosa ma sui dati da 650:1000, poi sui dati da 649:1000 e così via fino ad arrivare all'ultima iterazione sulla finestra di dati da 251:1000. Sono 750 iterazioni e ottengo così 750 risultati dalla funzione, che salvati in un array o vettore, possa poi plottare.Grazie per ogni aiuto.

9 Risposte

  • Re: Iterazione su file txt

    Qual è il problema specifico? Leggere il file di input?, creare la funzione "myFunction"? plottare i dati9?

    Una volta letto il file di input (mySerie.txt) avrai il vettore nelworkspace.

    Se il file di input contiene solo una colonna di numeri puoi "leggerlo" con la funzione "load".

    A questo punto la soluzione più semplice (anche se forse, non la migliore) potrebbe essere creare un loop che, ad ogni iterazione, estragga la porzione di dati di interesse e li passi alla funzione (myFunction).

    Per quanto riguarda l'estrazione dei dati, la risposta è già nella domanda: se "x" è il vettore, i vari set di dati saranno (come hai scritto):

    x(651:1000)
    x(650:1000)
    x(649:1000)

    ecc.

    Hope this helps.
  • Re: Iterazione su file txt

    Ciao,

    grazie per la risposta: il file di testo lo importo tramite mySerie = dlmread('mySerie.txt');

    Quello che chiedo è la cortesia se poi farmi avere il code per il loop, solitamente non uso Matlab e mi serve solo per valutare la funzione su diverse serie di finestre di dati.

    Dimenticavo: non ho problemi ad importare il file, è una sola colonna con numeri, e la funzione ce l'ho già; vorrei solo applicare la mia funzione ad ogni iterazione, salvare il risultato in un vettore e plottare alla fine la serie dei 750 risultati della funzione
  • Re: Iterazione su file txt

    La scrittura del loop dipende molto da come è definita la tua funzione ("myFuntion"): che input richiede? Che output genera?

    Al limite, potrebbe anche non essere necessario un loop.

    Potresti pubblicare la funzione?

    Una possibile soluzione potrebbe essere:
    % Lettura file di input
    x=dlmread('mySerie.txt');
    % Identificazione numero elementi
    n=length(x);
    % Definizione dei limiti per l'estrazione dei dati
    % ==> dagli ultimi 350 agli ultimi 750
    n_punti=[350 750];
    % Inizializzazione dell'indice del vettore risultati
    cnt=0;
    % Loop sulle sezioni di dati
    % 
    for i=n_punti(1):n_punti(2)
       % Incremento dell'indice
       cnt=cnt+1
       % Invocazione della funzione e salvataggio del risultato in un vettore
       ret_val(cnt)=myFunction(x(n-i+1:end))
    end
    
    plot(ret_val)
    grid on
    
    Con riferimento all'esempio che hai scritto (partendo dagli ultimi 350 punti (651:1000) applico la funzione e ottengo un risultato, poi stessa cosa ma sui dati da 650:1000, poi sui dati da 649:1000 e così via fino ad arrivare all'ultima iterazione sulla finestra di dati da 251:1000:
    [*] nel vettore n_punti vengono definiti i limiti dei punti delle sezioni che vuoi estrarre
    [*] il loop cicla nell'intervallo definito da "n_punti" con passo 1
    [*] nel loop alla variabile "n" (numero di punti totale) viene, di volta in volta, sottratto il valore dell'indice del loop (+1)
    in questo modo, per esempio, alla prima iterazione:
    i=350
    n=1000
    ==> n -i+1 ==> 1000-350+1 ==> 651
    
    di conseguenza, l'istruzione "x(n-i+1:end)" significa: ... gli elementi del vettore x "a partire da "n-i+1" "fino a" (:) "l'ultimo (end).

    Come scritto all'inizio, questa è solo una delle tante possibilità.
    Se pubblicassi la funzione, forse si potrebbe scrivere qualcosa di meglio.

    Hope this helps.
  • Re: Iterazione su file txt

    Grazie, veramente gentilissimo: ho messo la funzione e la serie txt a questi indirizzi

    http://depositfiles.com/files/d7coro1zx

    http://depositfiles.com/files/0wknpe1km

    La funzione che uso è questa

    http://www.mathworks.com/matlabcentral/fileexchange/30076-generalized-hurst-exponent
  • Re: Iterazione su file txt

    Ho provato ad eseguire la funzione coni dati di input che hai pubblicato.

    Il loop sembra funzionare anche se la funzione è un po' lenta; si potrebbe provare a "vettorizzarla" ma ci vuole un bel po' di tempo.

    Per il momento, questo codice sembra funzionare e plotta il valori di "mH" e "sH" in funzione del numero di punti utilizzati.

    DISCLAIMER:
    Ad ogni modo devi verificare che i risultati ottenuti siano corretti (il codice è fornito ... as is.


    La funzione viene chiamata con un solo parametro.
    % Lettura file di input
    x=dlmread('mySerie.txt');
    % x=randi(10000,1000,1);
    % Identificazione numero elementi
    n=length(x);
    % Definizione dei limiti per l'estrazione dei dati
    % ==> dagli ultimi 5 agli ultimi 25
    n_punti=[350 750];
    % Inizializzazione dell'indice del vettore risultati
    cnt=0;
    % Loop sulle sezioni di dati
    % 
    for i=n_punti(1):n_punti(2)
       % Incremento dell'indice
       cnt=cnt+1;
       % Invocazione della funzione e salvataggio del risultato in un vettore
       [mH(cnt),sH(cnt)]=genhurst(x(n-i+1:end));
    end
    
    figure
    subplot(2,1,1)
    plot([n_punti(1):n_punti(2)],mH)
    title('mH')
    grid on
    subplot(2,1,2)
    plot([n_punti(1):n_punti(2)],sH)
    title('sH')
    grid on
    
    figure
    plot([n_punti(1):n_punti(2)],mH,[n_punti(1):n_punti(2)],sH,'r')
    legend({'mH' 'sH'})
    grid on
    Hope this helps.
  • Re: Iterazione su file txt

    Ciao ask_raf,

    ti ringrazio immensamente per il tempo che mi hai dedicato: domattina provo subito il tuo code.

    Grazie ancora!
  • Re: Iterazione su file txt

    Non c'è di che, spero che funzioni!

    Fammi sapere.

  • Re: Iterazione su file txt

    Ho finalmente avuto modo di provare per bene il code e confrontarlo con i risultati che avevo attenuto sulle serie create manualmente: i risultati sono identici, il codice che hai scritto è perfetto.

    Grazie ancora!
  • Re: Iterazione su file txt

    Non c'è di che, sono contento di essere stato utile!
    In fin dei conti ho solo scritto un loop
Devi accedere o registrarti per scrivere nel forum
9 risposte