SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
GNU Octave: strutture dati e input/output

                  Ing. Andrea Spadaccini
              a.spadaccini@diit.unict.it

 Dipartimento di Ingegneria Informatica e delle Telecomunicazioni
                      Universit` di Catania
                                a


                       28 Aprile 2009
Sommario




         Strutture dati avanzate
         I/O di dati su file
         Riepilogo gestione file WAVE
         Grafici




Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Cell array                                                                               Strutture




                                             Parte I

                                     Strutture dati avanzate




Ing. Andrea Spadaccini                                     DIIT - Universit` degli Studi di Catania
                                                                           a
GNU Octave: strutture dati e input/output
Cell array                                                                           Strutture




Riepilogo: vettori


  Vettori
  I vettori (e le matrici) sono delle strutture dati che consentono di
  elaborare dati di tipo omogeneo.

  Problema
  Esistono strutture dati che consentano di raggruppare dati non
  omogenei?
  Esempio: carta da gioco




Ing. Andrea Spadaccini                                 DIIT - Universit` degli Studi di Catania
                                                                       a
GNU Octave: strutture dati e input/output
Cell array                                                                            Strutture




Cell array



  Scopo
  I cell array sono dei contenitori in grado di contenere dati di tipo
  arbitrario.

  Utilizzo
  Si usano in maniera simile ai vettori, con la differenza che al posto
  dell’operatore [] si utilizzano gli operatori () o {}




Ing. Andrea Spadaccini                                  DIIT - Universit` degli Studi di Catania
                                                                        a
GNU Octave: strutture dati e input/output
Cell array                                                                                  Strutture




Differenza tra gli operatori {} e ()

  Operatore {}

             Costruzione di un cell array
             Indicizzazione (per prelevare valori o assegnare nuovi valori)
             Selezione elementi multipli: elenco separato da virgole
             Eliminazione: svuota la cella senza eliminarla

  Operatore ()

             Indicizzazione (per prelevare valori o assegnare nuovi valori)
             Selezione elementi multipli: nuovo cell array
             Eliminazione: elimina la cella

Ing. Andrea Spadaccini                                        DIIT - Universit` degli Studi di Catania
                                                                              a
GNU Octave: strutture dati e input/output
Cell array                                                                Strutture




Creazione di Cell Array

  >> a = cell(1, 2)
  a = {
    [1,1] = []
    [1,2] = []
  }

  >> arr = {’stringa’, eye(2), 1:2:10}
  arr = {
    [1,1] = stringa
    [1,2] = 1         0
            0        1
    [1,3] = 1   3   5   7   9
  }

Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Cell array                                                                Strutture




Creazione di Cell Array

  >> a = cell(1, 2)
  a = {
    [1,1] = []
    [1,2] = []
  }

  >> arr = {’stringa’, eye(2), 1:2:10}
  arr = {
    [1,1] = stringa
    [1,2] = 1         0
            0        1
    [1,3] = 1   3   5   7   9
  }

Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Cell array                                                                Strutture




Aggiunta di un elemento


  >> arr{4} = 90
  arr = {
    [1,1] = stringa
    [1,2] =
            1        0
            0        1
    [1,3] =
       1   3   5   7   9
    [1,4] = 90
  }



Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Cell array                                                                Strutture




Selezione di elementi

  >> arr{1}
  ans = stringa
  >> arr([1 4])
  ans = {
    [1,1] = stringa
    [1,2] = 90
  }
  >> arr{[1 4]}
  ans =
  (,
     [1] = stringa
     [2] = 90
  ,)
Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Cell array                                                                Strutture




Selezione di elementi

  >> arr{1}
  ans = stringa
  >> arr([1 4])
  ans = {
    [1,1] = stringa
    [1,2] = 90
  }
  >> arr{[1 4]}
  ans =
  (,
     [1] = stringa
     [2] = 90
  ,)
Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Cell array                                                                Strutture




Selezione di elementi

  >> arr{1}
  ans = stringa
  >> arr([1 4])
  ans = {
    [1,1] = stringa
    [1,2] = 90
  }
  >> arr{[1 4]}
  ans =
  (,
     [1] = stringa
     [2] = 90
  ,)
Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Cell array                                                                        Strutture




Eliminazione di elementi

  >> arr(2) = []
  arr = {
    [1,1] = stringa
    [1,2] = 1    3  5                       7   9
    [1,3] = 90
  }

  >> arr{3}              = []
  arr = {
    [1,1] =              stringa
    [1,2] =              1   3   5          7   9
    [1,3] =              []
  }

Ing. Andrea Spadaccini                              DIIT - Universit` degli Studi di Catania
                                                                    a
GNU Octave: strutture dati e input/output
Cell array                                                                        Strutture




Eliminazione di elementi

  >> arr(2) = []
  arr = {
    [1,1] = stringa
    [1,2] = 1    3  5                       7   9
    [1,3] = 90
  }

  >> arr{3}              = []
  arr = {
    [1,1] =              stringa
    [1,2] =              1   3   5          7   9
    [1,3] =              []
  }

Ing. Andrea Spadaccini                              DIIT - Universit` degli Studi di Catania
                                                                    a
GNU Octave: strutture dati e input/output
Cell array                                                                        Strutture




Eliminazione di elementi

  >> arr(2) = []
  arr = {
    [1,1] = stringa
    [1,2] = 1    3  5                       7   9
    [1,3] = 90
  }

  >> arr{3}              = []
  arr = {
    [1,1] =              stringa
    [1,2] =              1   3   5          7   9
    [1,3] =              []
  }

Ing. Andrea Spadaccini                              DIIT - Universit` degli Studi di Catania
                                                                    a
GNU Octave: strutture dati e input/output
Cell array                                                                                             Strutture




Conversione di Cell Array

  Conversione da Cell Array a matrice
  La funzione cell2mat prende come parametro in ingresso un cell array e
  tenta di convertirlo in una matrice.
  Per effettuare questa conversione, tenta di concatenare tutti gli elementi
  del cell array. Questa potrebbe non essere l’operazione desiderata

  Esempio di errata conversione

  >> cell2mat(arr)
  ans =
  115 116 114 105                           110   103   97   1   3   5       7     9


Ing. Andrea Spadaccini                                                   DIIT - Universit` degli Studi di Catania
                                                                                         a
GNU Octave: strutture dati e input/output
Cell array                                                                          Strutture




Strutture

  Descrizione
  GNU Octave consente di realizzare strutture simili alle strutture messe a
  disposizione dal linguaggio C, ovvero delle strutture dati che contengano
  dati di tipo eterogeneo indicizzabili tramite notazione puntata ed
  identificatori di tipo stringa.

  Una differenza rispetto al C
  In C ` possibile creare un nuovo tipo di dato ed usarlo per instanziare
       e
  diverse variabili di quel tipo.
  Ci` non ` vero in Octave, in quanto le strutture sono fortemente
    o      e
  dinamiche, ed ` addirittura possibile aggiungere campi in fase di
                  e
  esecuzione.

Ing. Andrea Spadaccini                                DIIT - Universit` degli Studi di Catania
                                                                      a
GNU Octave: strutture dati e input/output
Cell array                                                                       Strutture




Creazione di strutture (I)


  La funzione struct
  La funzione struct consente di creare una struttura specificando in
  maniera alternata il nome del campo ed il valore. Esempio:

  >> s = struct(’a’, 1, ’b’, 2)
  s =
  {
    a = 1
    b = 2
  }



Ing. Andrea Spadaccini                             DIIT - Universit` degli Studi di Catania
                                                                   a
GNU Octave: strutture dati e input/output
Cell array                                                                          Strutture




Creazione di strutture (II)

  Generazione diretta

  >> str.x = 1
  str =
  {
    x = 1
  }


  Attenzione
  Questa sintassi ` da evitare, in quanto poco esplicita. Meglio scrivere pi`
                  e                                                         u
  codice ed aumentare la leggibilit`.
                                    a

Ing. Andrea Spadaccini                                DIIT - Universit` degli Studi di Catania
                                                                      a
GNU Octave: strutture dati e input/output
Cell array                                                                           Strutture




Accesso agli elementi di una struttura

  Notazione puntata

  >> s.a + s.b
  ans = 3


  Funzione getfield
  La funzione getfield prende come parametri una struttura ed una
  chiave (o pi` chiavi, in caso di strutture annidate), restituendo l’elemento
              u
  corrispondente:

  >> getfield(s, ’a’) + getfield(s, ’b’)
  ans = 3

Ing. Andrea Spadaccini                                 DIIT - Universit` degli Studi di Catania
                                                                       a
GNU Octave: strutture dati e input/output
Cell array                                                                                    Strutture




Impostazione degli elementi di una struttura

  Notazione puntata

  >> s.dato = 1:10
  s = {
    a = 1
    b = 2
    dato = 1   2   3                        4   5   6   7   8   9     10
  }


  Funzione setfield
  Funziona in maniera analoga a getfield, con un parametro aggiuntivo
  contenente il valore da impostare.
Ing. Andrea Spadaccini                                          DIIT - Universit` degli Studi di Catania
                                                                                a
GNU Octave: strutture dati e input/output
Cell array                                                                           Strutture




Iterazione degli elementi di una struttura
  Sintassi estesa istruzione for
  L’istruzione for consente di iterare una struttura con la seguente sintassi:
  for [val, key ] = struttura
    istruzioni
  end

  Esempio

  >> for [value, key] = s
         disp([key ’: ’ mat2str(value)]);
     end
  a: 1
  b: 2
  dato: [1,2,3,4,5,6,7,8,9,10]
Ing. Andrea Spadaccini                                 DIIT - Universit` degli Studi di Catania
                                                                       a
GNU Octave: strutture dati e input/output
Cell array                                                                      Strutture




Rimozione di elementi da una struttura

  Funzione rmfield
  Sintassi: rmfield(s, field). Torna una nuova struttura, creata a
  partire dalla struttura s eliminando il campo field.

  Esempio

  >> s = rmfield(s, ’dato’)
  ans =
  {
    a = 1
    b = 2
  }


Ing. Andrea Spadaccini                            DIIT - Universit` degli Studi di Catania
                                                                  a
GNU Octave: strutture dati e input/output
Cell array                                                                              Strutture




Altre funzioni utili sulle strutture
             isstruct(s) - torna 1 se s ` una struttura
                                        e
             isfield(s, name) - torna 1 se s ` una struttura e contiene un
                                              e
             campo denominato name
             fieldnames(s) - torna un cell array contenente l’elenco dei nomi
             dei campi di s
             struct2cell(s) - torna un cell array contenente gli elementi di s
  Esempio struct2cell

  >> struct2cell(s)
  ans = {
    [1,1] = 1
    [2,1] = 2
  }
Ing. Andrea Spadaccini                                    DIIT - Universit` degli Studi di Catania
                                                                          a
GNU Octave: strutture dati e input/output
Cell array                                                                        Strutture




Esempio: mazzo di carte (I)
  Modello
  Useremo come modello del mazzo di carte un vettore di strutture carta.
  Ciascuna struttura conterr` un campo seme ed un campo valore.
                            a
  Generazione del mazzo

  semi = {’C’, ’Q’, ’F’, ’P’};
  valori = 1:13; carte = [];
  for i = semi
      for j = valori
          carta = struct(’seme’, i, ’valore’, j);
          carte = [carte carta];
      end
  end
Ing. Andrea Spadaccini                              DIIT - Universit` degli Studi di Catania
                                                                    a
GNU Octave: strutture dati e input/output
Cell array                                                                        Strutture




Esempio: mazzo di carte (II)

  La prima carta

  >> carte(1)
  ans =
  {
    seme = C
    valore = 1
  }


  Mischiamo il mazzo di carte
  La funzione randperm(N) torna un vettore contenente gli interi tra 1 ed
  N, in ordine casuale. Quindi...
Ing. Andrea Spadaccini                              DIIT - Universit` degli Studi di Catania
                                                                    a
GNU Octave: strutture dati e input/output
Cell array                                                                 Strutture




Esempio: mazzo di carte (III)
  Codice per mischiare il mazzo

  carte = carte(randperm(length(carte)));


  La prima carta (ovvero una carta a caso)

  >> carte(1)
  ans =
  {
    seme = Q
    valore = 8
  }

Ing. Andrea Spadaccini                       DIIT - Universit` degli Studi di Catania
                                                             a
GNU Octave: strutture dati e input/output
I comandi save e load                                                                      I/O in stile C




                                                 Parte II

                                            I/O di dati su file




Ing. Andrea Spadaccini                                           DIIT - Universit` degli Studi di Catania
                                                                                 a
GNU Octave: strutture dati e input/output
I comandi save e load                                                             I/O in stile C




I comandi save e load
  save
  Sintassi: save [opzioni] nomefile var1 [... varN]
  Se invocato senza opzioni, salva le variabili var1 ... varN nel file
  nomefile, utilizzando il formato MatlabTM 5.
  Alcune opzioni:
         -ascii salva i dati in formato ASCII (vale per scalari, vettori e
         matrici)
         -v4 -v6 -v7 salvano i dati in formato MatlabTM 4, 6 o 7

  load
                                                              `
  La sintassi ` simile a save, utilizza le stesse opzioni. E possibile omettere
              e
  l’elenco di variabili, ed in tal caso tutte le variabili presenti nel file
  saranno caricate.
Ing. Andrea Spadaccini                                  DIIT - Universit` degli Studi di Catania
                                                                        a
GNU Octave: strutture dati e input/output
I comandi save e load                                                 I/O in stile C




Esempio


  matrix = ones(3);
  save m.mat matrix
  exit
  (caricamento nuova istanza di Octave)
  load m.mat
  disp(matrix)
          1        1        1
          1        1        1
          1        1        1



Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
I comandi save e load                                                            I/O in stile C




Apertura e chiusura

  La funzione fopen
  Sintassi: fid = fopen(name, mode, arch). Torna un file-id
  numerico, da usare nelle successive operazioni.
  Opzioni:
         name nome del file da aprire
         mode modalit` di apertura (’r’, ’w’, ’a’ ..)
                     a
         arch parametri dipendenti dall’architettura
  Torna -1 se l’apertura non va a buon fine.

  La funzione fclose
  Sintassi: fclose(fid).

Ing. Andrea Spadaccini                                 DIIT - Universit` degli Studi di Catania
                                                                       a
GNU Octave: strutture dati e input/output
I comandi save e load                                                              I/O in stile C




Operazioni su file




         fputs(fid, s) scrive la stringa s nel file fid
         fprintf(fid, fmt, ..) scrive sul file fid secondo la stringa di
         formato fmt ed eventuali parametri aggiuntivi
         [v1, v2, .., count] = fscanf(fid, fmt, ’C’) legge dal file
         fid, tornando i valori specificati in fmt nelle variabili v1, v2...




Ing. Andrea Spadaccini                                   DIIT - Universit` degli Studi di Catania
                                                                         a
GNU Octave: strutture dati e input/output
I comandi save e load                                                 I/O in stile C




Esempio

  f = fopen(’out.txt’, ’w’);
  for i = 1:10
      fprintf(f, ’%d %dn’, i, i+1);
  end
  fclose(f);

  f = fopen(’out.txt’, ’r’);
  count = 1;
  while count >= 1
      [v1, v2, count] = fscanf(f, ’%d %dn’, ’C’);
      if count > 1
          disp(v1); disp(v2);
      end
  end
Ing. Andrea Spadaccini                      DIIT - Universit` degli Studi di Catania
                                                            a
GNU Octave: strutture dati e input/output
Octave-Forge                                                   Funzioni per l’I/O su file WAVE




                                            Parte III

                               Riepilogo gestione file WAVE




Ing. Andrea Spadaccini                                  DIIT - Universit` degli Studi di Catania
                                                                        a
GNU Octave: strutture dati e input/output
Octave-Forge                                               Funzioni per l’I/O su file WAVE




Octave-Forge


  Cos’` Octave-Forge
      e
  `
  E un insieme di pacchetti semi-ufficiali per Octave, che ne estendono le
  funzionalit`.
             a

  Cos’` un pacchetto
       e
  `
  E l’equivalente dei toolbox di MatlabTM , ovvero un insieme di funzioni
  aventi uno scopo comune. Si presenta sotto forma di file con estensione
  .tar.gz, e si installano con il comando pkg install
  nomepacchetto.tar.gz



Ing. Andrea Spadaccini                              DIIT - Universit` degli Studi di Catania
                                                                    a
GNU Octave: strutture dati e input/output
Octave-Forge                                                    Funzioni per l’I/O su file WAVE




Pacchetti di interesse




         Audio - contiene funzioni per l’elaborazione di file audio (wave ed
         altri)
         Image - contiene funzioni per l’elaborazione delle immagini
         Video - contiene funzioni per l’elaborazione dei video in formato AVI
         Signal - contiene funzioni per l’elaborazione dei segnali




Ing. Andrea Spadaccini                                   DIIT - Universit` degli Studi di Catania
                                                                         a
GNU Octave: strutture dati e input/output
Octave-Forge                                             Funzioni per l’I/O su file WAVE




I/O su file WAVE


  La funzione wavread
  Sintassi: [y, fs, bits] = wavread(filename). Legge i dati del file
  filename, restituendo in y i campioni, in fs la frequenza di
  campionamento in Hz, in bits il numero di bit per campione.

  La funzione wavwrite
  Sintassi: wavwrite(y, fs, bits, filename). Scrive i campioni
  presenti nel vettore y nel file filename. Se nbits o fs non sono
  specificati, di default utilizza 8000 Hz e 16 bit per campione



Ing. Andrea Spadaccini                            DIIT - Universit` degli Studi di Catania
                                                                  a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base       Stili   Grafici multipli         Altre funzioni sui grafici




                                                         Parte IV

                                                         Grafici




Ing. Andrea Spadaccini                                                        DIIT - Universit` degli Studi di Catania
                                                                                              a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Il sistema di plotting di GNU Octave

  gnuplot
  gnuplot [sic] ` il programma che si occupa di realizzare dietro le quinte i
                e
  grafici di Octave.

  Sintassi dei comandi di plotting
  Anche in questo frangente, la sintassi di Octave ` equivalente a quella di
                                                   e
  MatlabTM , con la differenza che alcune opzioni avanzate non sono
  implementate a causa di limitazioni di gnuplot.

  Suggerimento per gli utenti GNU/Linux
  Invocate Octave utilizzando il comando GNUTERM=’wxt’ octave per
  ottenere grafici pi` gradevoli grazie al backend wxt di gnuplot.
                    u

Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Il comando plot, sintassi di base


  Invocazione con argomento singolo

          Se invocato con un solo argomento di tipo vettore, la funzione plot
          genera un grafico utilizzando come ascisse gli indici del vettore e
          come ordinate gli elementi del vettore.
          Se invocato con un solo argomento di tipo matrice, ogni colonna
          viene trattata come vettore a s` stante, e viene visualizzato
                                           e
          all’interno dello stesso grafico secondo le regole dell’invocazione con
          vettore




Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Esempi plot singolo parametro


  Vettore

  interval = linspace(-pi, pi, 100);
  plot(sin(interval));


  Matrice

  plot([sin(interval); cos(interval)]’);




Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Invocazione di plot con due parametri


  plot(x, y)
  Se plot viene invocato con due parametri, utilizza il primo come vettore
  (matrice) delle ascisse ed il secondo come vettore (matrice) delle
  ordinate.

  Esempio

  plot(interval, sin(interval));
  plot([interval; interval]’, [sin(interval); cos(interval)]’)




Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Applicare stili ai grafici (I)

  La stringa di formato
  `
  E possibile fornire a plot un parametro aggiuntivo, che contiene
  informazioni sullo stile della linea da utilizzare per il grafico.
  Formato: ’stile colore ;etichetta;’. Ciascuna parte ` opzionale.
                                                               e

  Stili
  ’-’ linea tratteggiata, ’.’ linea puntata, ’+’ ’*’ ’o’ ’x’ simboli
  discreti.

  Colori
  ’k’, ’r’, ’g’, ’b’, ’m’, ’c’, ’w’


Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Applicare stili ai grafici (II)


  Etichette
  Le etichette sono stringhe che compaiono nella legenda del grafico,
  accanto allo stile che rappresenta il dato graficato. I due caratteri ;
  prima e dopo l’etichetta sono obbligatori.

  Esempi

  plot(interval, sin(interval), ’;sin(x);’);
  plot(interval, cos(interval), ’g-;cos(x);’);




Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Applicare stili ai grafici (III)


  Propriet`
          a
  Oltre alla stringa di formato, ` possibile aggiungere alla funzione plot
                                 e
  diversi parametri (coppie chiave/valore) contenenti propriet` del grafico.
                                                                a

  Alcune propriet` comuni
                 a

          linewidth - larghezza della linea
          markersize - dimensione del marker




Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Gestione finestre di plotting

  Il comando figure
  Il comando figure consente di specificare la finestra di plotting da
  utilizzare per i prossimi comandi di plotting. Prende come parametro un
  intero, che indica la finestra da utilizzare.

  Esempio

  figure(1)
  plot(interval, sin(interval), ’r-;sin(x);’)
  figure(2)
  plot(interval, cos(interval), ’b-;cos(x);’)


Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Grafici multipli




  Cosa intendiamo per grafici multipli?

          Plot di pi` serie di dati utilizzando un unico asse cartesiano (unico
                    u
          grafico)
          Pi` grafici (assi) nella stessa figura
            u




Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Il comando hold
  Scopo e sintassi
  Lo scopo del comando hold ` quello di disegnare pi` serie di dati nello
                                  e                   u
  stesso grafico, variando il comportamento predefinito (ovvero cancellare
  di volta in volta la figura).Il comando hold accetta un parametro, che
  pu` valere on (non cancella la figura) o off. Se invocato senza
     o
  parametri, varia lo stato attuale.
  Esempio

  figure(2)
  hold on
  plot(interval, sin(interval), ’r-;sin(x);’)
  plot(interval, cos(interval), ’b-;cos(x);’)
  hold off
Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Il comando hold
  Scopo e sintassi
  Lo scopo del comando hold ` quello di disegnare pi` serie di dati nello
                                  e                   u
  stesso grafico, variando il comportamento predefinito (ovvero cancellare
  di volta in volta la figura).Il comando hold accetta un parametro, che
  pu` valere on (non cancella la figura) o off. Se invocato senza
     o
  parametri, varia lo stato attuale.
  Esempio

  figure(2)
  hold on
  plot(interval, sin(interval), ’r-;sin(x);’)
  plot(interval, cos(interval), ’b-;cos(x);’)
  hold off
Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Il comando subplot

  Scopo e sintassi
  Lo scopo del comanto subplot ` quello di suddividere la figura attuale
                                    e
  in sotto-grafici, e di selezionare uno di essi per poterlo utilizzare.
  La sintassi ` subplot(nrows, ncols, index), dove nrows ed ncols
               e
  indicano la dimensione della griglia che si intende realizzare ed index ` e
  l’indice del grafico attuale, partendo dal grafico in altro a sinistra (indice
  1) fino al grafico in basso a destra (indice nrows * ncols), facendo
  variare l’indice riga per riga.

  Griglia di esempio
   subplot(2, 3, 1)                         subplot(2, 3, 2)      subplot(2, 3, 3)
   subplot(2, 3, 4)                         subplot(2, 3, 5)      subplot(2, 3, 6)

Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Il comando subplot

  Scopo e sintassi
  Lo scopo del comanto subplot ` quello di suddividere la figura attuale
                                    e
  in sotto-grafici, e di selezionare uno di essi per poterlo utilizzare.
  La sintassi ` subplot(nrows, ncols, index), dove nrows ed ncols
               e
  indicano la dimensione della griglia che si intende realizzare ed index ` e
  l’indice del grafico attuale, partendo dal grafico in altro a sinistra (indice
  1) fino al grafico in basso a destra (indice nrows * ncols), facendo
  variare l’indice riga per riga.

  Griglia di esempio
   subplot(2, 3, 1)                         subplot(2, 3, 2)      subplot(2, 3, 3)
   subplot(2, 3, 4)                         subplot(2, 3, 5)      subplot(2, 3, 6)

Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Esempio: plot multipli


  figure(3)
  subplot(3, 1, 1)
  plot(interval, sin(interval),                          ’r-;sin(x);’)
  subplot(3, 1, 2)
  hold on
  plot(interval, sin(interval),                          ’r-;sin(x);’)
  plot(interval, cos(interval),                          ’b-;cos(x);’)
  hold off
  subplot(3, 1, 3)
  plot(interval, cos(interval),                          ’b-;cos(x);’)



Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Titolo ed etichette



  Funzione title
  La funzione title prende come parametro una stringa ed ha l’effetto di
  aggiungere un titolo al grafico corrente.

  Le funzioni xlabel ed ylabel
  Queste due funzioni prendono come parametro una stringa ed
  aggiungono un’etichetta all’asse x (o all’asse y).




Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Gestione assi cartesiani
  Funzione axis
  La funzione axis prende come primo parametro un vettore di 2, 4 o 6
  numeri. I primi due numeri sono i limiti dell’asse x, i secondi due dell’asse
  y, gli ultimi due dell’asse z.

  Impostazione ticks
  La funzione gca restituisce il riferimento agli assi correnti. Con questo
  riferimento si possono impostare diverse propriet`, tra cui:
                                                     a
          XTick e YTick, vettore contenente i valori da utilizzare per i ticks
          XTicklabel e YTicklabel, vettore contenente gli elementi da
          utilizzare come ticks
  La funzione da utilizzare per impostare le propriet` ` set(gca,
                                                     ae
  propriet`, valore)
            a
Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Introduzione         Il comando plot, sintassi di base   Stili   Grafici multipli         Altre funzioni sui grafici




Esempio

  figure(4)
  plot(interval, sin(interval))
  axis([-2 * pi, 2 * pi, -1, 1])
  set(gca, ’XTick’, -2 * pi: pi / 2: 2 * pi)
  set(gca, ’XTicklabel’, {’-2 pi’, ’- 3/2 pi’, ’- pi’,
      ’- pi/2’, ’0’, ’pi/2’, ’pi’, ’3/2 pi’, ’2 pi’})
  title(’sin(x)’)
  xlabel(’x’)
  ylabel(’sin(x)’)

  Da provare
  sombrero
  peaks
Ing. Andrea Spadaccini                                                    DIIT - Universit` degli Studi di Catania
                                                                                          a
GNU Octave: strutture dati e input/output
Riferimenti



  Sito ufficiale di GNU Octave
  http://www.octave.org

  Documentazione
  John W. Eaton et al. GNU Octave Manual -
  http://www.gnu.org/software/octave/doc/interpreter/




Ing. Andrea Spadaccini                           DIIT - Universit` degli Studi di Catania
                                                                 a
GNU Octave: strutture dati e input/output
Licenza

  Licenza Creative Commons
  Questo lavoro ` rilasciato sotto licenza Creative Commons
                 e
  Attribution-Share Alike 2.5 Italy
  (http://creativecommons.org/licenses/by-sa/2.5/it/)

  Significato della licenza

         La presentazione ` liberamente scaricabile e redistribuibile per
                           e
         qualsiasi fine
         `
         E necessario citare l’autore
         `
         E necessario redistribuire secondo gli stessi termini eventuali lavori
         derivati da questa presentazione

Ing. Andrea Spadaccini                                    DIIT - Universit` degli Studi di Catania
                                                                          a
GNU Octave: strutture dati e input/output

Weitere ähnliche Inhalte

Empfohlen

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Empfohlen (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

GNU Octave: Strutture dati e I/O

  • 1. GNU Octave: strutture dati e input/output Ing. Andrea Spadaccini a.spadaccini@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Universit` di Catania a 28 Aprile 2009
  • 2. Sommario Strutture dati avanzate I/O di dati su file Riepilogo gestione file WAVE Grafici Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 3. Cell array Strutture Parte I Strutture dati avanzate Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 4. Cell array Strutture Riepilogo: vettori Vettori I vettori (e le matrici) sono delle strutture dati che consentono di elaborare dati di tipo omogeneo. Problema Esistono strutture dati che consentano di raggruppare dati non omogenei? Esempio: carta da gioco Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 5. Cell array Strutture Cell array Scopo I cell array sono dei contenitori in grado di contenere dati di tipo arbitrario. Utilizzo Si usano in maniera simile ai vettori, con la differenza che al posto dell’operatore [] si utilizzano gli operatori () o {} Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 6. Cell array Strutture Differenza tra gli operatori {} e () Operatore {} Costruzione di un cell array Indicizzazione (per prelevare valori o assegnare nuovi valori) Selezione elementi multipli: elenco separato da virgole Eliminazione: svuota la cella senza eliminarla Operatore () Indicizzazione (per prelevare valori o assegnare nuovi valori) Selezione elementi multipli: nuovo cell array Eliminazione: elimina la cella Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 7. Cell array Strutture Creazione di Cell Array >> a = cell(1, 2) a = { [1,1] = [] [1,2] = [] } >> arr = {’stringa’, eye(2), 1:2:10} arr = { [1,1] = stringa [1,2] = 1 0 0 1 [1,3] = 1 3 5 7 9 } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 8. Cell array Strutture Creazione di Cell Array >> a = cell(1, 2) a = { [1,1] = [] [1,2] = [] } >> arr = {’stringa’, eye(2), 1:2:10} arr = { [1,1] = stringa [1,2] = 1 0 0 1 [1,3] = 1 3 5 7 9 } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 9. Cell array Strutture Aggiunta di un elemento >> arr{4} = 90 arr = { [1,1] = stringa [1,2] = 1 0 0 1 [1,3] = 1 3 5 7 9 [1,4] = 90 } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 10. Cell array Strutture Selezione di elementi >> arr{1} ans = stringa >> arr([1 4]) ans = { [1,1] = stringa [1,2] = 90 } >> arr{[1 4]} ans = (, [1] = stringa [2] = 90 ,) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 11. Cell array Strutture Selezione di elementi >> arr{1} ans = stringa >> arr([1 4]) ans = { [1,1] = stringa [1,2] = 90 } >> arr{[1 4]} ans = (, [1] = stringa [2] = 90 ,) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 12. Cell array Strutture Selezione di elementi >> arr{1} ans = stringa >> arr([1 4]) ans = { [1,1] = stringa [1,2] = 90 } >> arr{[1 4]} ans = (, [1] = stringa [2] = 90 ,) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 13. Cell array Strutture Eliminazione di elementi >> arr(2) = [] arr = { [1,1] = stringa [1,2] = 1 3 5 7 9 [1,3] = 90 } >> arr{3} = [] arr = { [1,1] = stringa [1,2] = 1 3 5 7 9 [1,3] = [] } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 14. Cell array Strutture Eliminazione di elementi >> arr(2) = [] arr = { [1,1] = stringa [1,2] = 1 3 5 7 9 [1,3] = 90 } >> arr{3} = [] arr = { [1,1] = stringa [1,2] = 1 3 5 7 9 [1,3] = [] } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 15. Cell array Strutture Eliminazione di elementi >> arr(2) = [] arr = { [1,1] = stringa [1,2] = 1 3 5 7 9 [1,3] = 90 } >> arr{3} = [] arr = { [1,1] = stringa [1,2] = 1 3 5 7 9 [1,3] = [] } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 16. Cell array Strutture Conversione di Cell Array Conversione da Cell Array a matrice La funzione cell2mat prende come parametro in ingresso un cell array e tenta di convertirlo in una matrice. Per effettuare questa conversione, tenta di concatenare tutti gli elementi del cell array. Questa potrebbe non essere l’operazione desiderata Esempio di errata conversione >> cell2mat(arr) ans = 115 116 114 105 110 103 97 1 3 5 7 9 Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 17. Cell array Strutture Strutture Descrizione GNU Octave consente di realizzare strutture simili alle strutture messe a disposizione dal linguaggio C, ovvero delle strutture dati che contengano dati di tipo eterogeneo indicizzabili tramite notazione puntata ed identificatori di tipo stringa. Una differenza rispetto al C In C ` possibile creare un nuovo tipo di dato ed usarlo per instanziare e diverse variabili di quel tipo. Ci` non ` vero in Octave, in quanto le strutture sono fortemente o e dinamiche, ed ` addirittura possibile aggiungere campi in fase di e esecuzione. Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 18. Cell array Strutture Creazione di strutture (I) La funzione struct La funzione struct consente di creare una struttura specificando in maniera alternata il nome del campo ed il valore. Esempio: >> s = struct(’a’, 1, ’b’, 2) s = { a = 1 b = 2 } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 19. Cell array Strutture Creazione di strutture (II) Generazione diretta >> str.x = 1 str = { x = 1 } Attenzione Questa sintassi ` da evitare, in quanto poco esplicita. Meglio scrivere pi` e u codice ed aumentare la leggibilit`. a Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 20. Cell array Strutture Accesso agli elementi di una struttura Notazione puntata >> s.a + s.b ans = 3 Funzione getfield La funzione getfield prende come parametri una struttura ed una chiave (o pi` chiavi, in caso di strutture annidate), restituendo l’elemento u corrispondente: >> getfield(s, ’a’) + getfield(s, ’b’) ans = 3 Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 21. Cell array Strutture Impostazione degli elementi di una struttura Notazione puntata >> s.dato = 1:10 s = { a = 1 b = 2 dato = 1 2 3 4 5 6 7 8 9 10 } Funzione setfield Funziona in maniera analoga a getfield, con un parametro aggiuntivo contenente il valore da impostare. Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 22. Cell array Strutture Iterazione degli elementi di una struttura Sintassi estesa istruzione for L’istruzione for consente di iterare una struttura con la seguente sintassi: for [val, key ] = struttura istruzioni end Esempio >> for [value, key] = s disp([key ’: ’ mat2str(value)]); end a: 1 b: 2 dato: [1,2,3,4,5,6,7,8,9,10] Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 23. Cell array Strutture Rimozione di elementi da una struttura Funzione rmfield Sintassi: rmfield(s, field). Torna una nuova struttura, creata a partire dalla struttura s eliminando il campo field. Esempio >> s = rmfield(s, ’dato’) ans = { a = 1 b = 2 } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 24. Cell array Strutture Altre funzioni utili sulle strutture isstruct(s) - torna 1 se s ` una struttura e isfield(s, name) - torna 1 se s ` una struttura e contiene un e campo denominato name fieldnames(s) - torna un cell array contenente l’elenco dei nomi dei campi di s struct2cell(s) - torna un cell array contenente gli elementi di s Esempio struct2cell >> struct2cell(s) ans = { [1,1] = 1 [2,1] = 2 } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 25. Cell array Strutture Esempio: mazzo di carte (I) Modello Useremo come modello del mazzo di carte un vettore di strutture carta. Ciascuna struttura conterr` un campo seme ed un campo valore. a Generazione del mazzo semi = {’C’, ’Q’, ’F’, ’P’}; valori = 1:13; carte = []; for i = semi for j = valori carta = struct(’seme’, i, ’valore’, j); carte = [carte carta]; end end Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 26. Cell array Strutture Esempio: mazzo di carte (II) La prima carta >> carte(1) ans = { seme = C valore = 1 } Mischiamo il mazzo di carte La funzione randperm(N) torna un vettore contenente gli interi tra 1 ed N, in ordine casuale. Quindi... Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 27. Cell array Strutture Esempio: mazzo di carte (III) Codice per mischiare il mazzo carte = carte(randperm(length(carte))); La prima carta (ovvero una carta a caso) >> carte(1) ans = { seme = Q valore = 8 } Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 28. I comandi save e load I/O in stile C Parte II I/O di dati su file Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 29. I comandi save e load I/O in stile C I comandi save e load save Sintassi: save [opzioni] nomefile var1 [... varN] Se invocato senza opzioni, salva le variabili var1 ... varN nel file nomefile, utilizzando il formato MatlabTM 5. Alcune opzioni: -ascii salva i dati in formato ASCII (vale per scalari, vettori e matrici) -v4 -v6 -v7 salvano i dati in formato MatlabTM 4, 6 o 7 load ` La sintassi ` simile a save, utilizza le stesse opzioni. E possibile omettere e l’elenco di variabili, ed in tal caso tutte le variabili presenti nel file saranno caricate. Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 30. I comandi save e load I/O in stile C Esempio matrix = ones(3); save m.mat matrix exit (caricamento nuova istanza di Octave) load m.mat disp(matrix) 1 1 1 1 1 1 1 1 1 Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 31. I comandi save e load I/O in stile C Apertura e chiusura La funzione fopen Sintassi: fid = fopen(name, mode, arch). Torna un file-id numerico, da usare nelle successive operazioni. Opzioni: name nome del file da aprire mode modalit` di apertura (’r’, ’w’, ’a’ ..) a arch parametri dipendenti dall’architettura Torna -1 se l’apertura non va a buon fine. La funzione fclose Sintassi: fclose(fid). Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 32. I comandi save e load I/O in stile C Operazioni su file fputs(fid, s) scrive la stringa s nel file fid fprintf(fid, fmt, ..) scrive sul file fid secondo la stringa di formato fmt ed eventuali parametri aggiuntivi [v1, v2, .., count] = fscanf(fid, fmt, ’C’) legge dal file fid, tornando i valori specificati in fmt nelle variabili v1, v2... Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 33. I comandi save e load I/O in stile C Esempio f = fopen(’out.txt’, ’w’); for i = 1:10 fprintf(f, ’%d %dn’, i, i+1); end fclose(f); f = fopen(’out.txt’, ’r’); count = 1; while count >= 1 [v1, v2, count] = fscanf(f, ’%d %dn’, ’C’); if count > 1 disp(v1); disp(v2); end end Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 34. Octave-Forge Funzioni per l’I/O su file WAVE Parte III Riepilogo gestione file WAVE Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 35. Octave-Forge Funzioni per l’I/O su file WAVE Octave-Forge Cos’` Octave-Forge e ` E un insieme di pacchetti semi-ufficiali per Octave, che ne estendono le funzionalit`. a Cos’` un pacchetto e ` E l’equivalente dei toolbox di MatlabTM , ovvero un insieme di funzioni aventi uno scopo comune. Si presenta sotto forma di file con estensione .tar.gz, e si installano con il comando pkg install nomepacchetto.tar.gz Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 36. Octave-Forge Funzioni per l’I/O su file WAVE Pacchetti di interesse Audio - contiene funzioni per l’elaborazione di file audio (wave ed altri) Image - contiene funzioni per l’elaborazione delle immagini Video - contiene funzioni per l’elaborazione dei video in formato AVI Signal - contiene funzioni per l’elaborazione dei segnali Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 37. Octave-Forge Funzioni per l’I/O su file WAVE I/O su file WAVE La funzione wavread Sintassi: [y, fs, bits] = wavread(filename). Legge i dati del file filename, restituendo in y i campioni, in fs la frequenza di campionamento in Hz, in bits il numero di bit per campione. La funzione wavwrite Sintassi: wavwrite(y, fs, bits, filename). Scrive i campioni presenti nel vettore y nel file filename. Se nbits o fs non sono specificati, di default utilizza 8000 Hz e 16 bit per campione Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 38. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Parte IV Grafici Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 39. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Il sistema di plotting di GNU Octave gnuplot gnuplot [sic] ` il programma che si occupa di realizzare dietro le quinte i e grafici di Octave. Sintassi dei comandi di plotting Anche in questo frangente, la sintassi di Octave ` equivalente a quella di e MatlabTM , con la differenza che alcune opzioni avanzate non sono implementate a causa di limitazioni di gnuplot. Suggerimento per gli utenti GNU/Linux Invocate Octave utilizzando il comando GNUTERM=’wxt’ octave per ottenere grafici pi` gradevoli grazie al backend wxt di gnuplot. u Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 40. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Il comando plot, sintassi di base Invocazione con argomento singolo Se invocato con un solo argomento di tipo vettore, la funzione plot genera un grafico utilizzando come ascisse gli indici del vettore e come ordinate gli elementi del vettore. Se invocato con un solo argomento di tipo matrice, ogni colonna viene trattata come vettore a s` stante, e viene visualizzato e all’interno dello stesso grafico secondo le regole dell’invocazione con vettore Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 41. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Esempi plot singolo parametro Vettore interval = linspace(-pi, pi, 100); plot(sin(interval)); Matrice plot([sin(interval); cos(interval)]’); Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 42. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Invocazione di plot con due parametri plot(x, y) Se plot viene invocato con due parametri, utilizza il primo come vettore (matrice) delle ascisse ed il secondo come vettore (matrice) delle ordinate. Esempio plot(interval, sin(interval)); plot([interval; interval]’, [sin(interval); cos(interval)]’) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 43. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Applicare stili ai grafici (I) La stringa di formato ` E possibile fornire a plot un parametro aggiuntivo, che contiene informazioni sullo stile della linea da utilizzare per il grafico. Formato: ’stile colore ;etichetta;’. Ciascuna parte ` opzionale. e Stili ’-’ linea tratteggiata, ’.’ linea puntata, ’+’ ’*’ ’o’ ’x’ simboli discreti. Colori ’k’, ’r’, ’g’, ’b’, ’m’, ’c’, ’w’ Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 44. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Applicare stili ai grafici (II) Etichette Le etichette sono stringhe che compaiono nella legenda del grafico, accanto allo stile che rappresenta il dato graficato. I due caratteri ; prima e dopo l’etichetta sono obbligatori. Esempi plot(interval, sin(interval), ’;sin(x);’); plot(interval, cos(interval), ’g-;cos(x);’); Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 45. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Applicare stili ai grafici (III) Propriet` a Oltre alla stringa di formato, ` possibile aggiungere alla funzione plot e diversi parametri (coppie chiave/valore) contenenti propriet` del grafico. a Alcune propriet` comuni a linewidth - larghezza della linea markersize - dimensione del marker Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 46. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Gestione finestre di plotting Il comando figure Il comando figure consente di specificare la finestra di plotting da utilizzare per i prossimi comandi di plotting. Prende come parametro un intero, che indica la finestra da utilizzare. Esempio figure(1) plot(interval, sin(interval), ’r-;sin(x);’) figure(2) plot(interval, cos(interval), ’b-;cos(x);’) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 47. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Grafici multipli Cosa intendiamo per grafici multipli? Plot di pi` serie di dati utilizzando un unico asse cartesiano (unico u grafico) Pi` grafici (assi) nella stessa figura u Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 48. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Il comando hold Scopo e sintassi Lo scopo del comando hold ` quello di disegnare pi` serie di dati nello e u stesso grafico, variando il comportamento predefinito (ovvero cancellare di volta in volta la figura).Il comando hold accetta un parametro, che pu` valere on (non cancella la figura) o off. Se invocato senza o parametri, varia lo stato attuale. Esempio figure(2) hold on plot(interval, sin(interval), ’r-;sin(x);’) plot(interval, cos(interval), ’b-;cos(x);’) hold off Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 49. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Il comando hold Scopo e sintassi Lo scopo del comando hold ` quello di disegnare pi` serie di dati nello e u stesso grafico, variando il comportamento predefinito (ovvero cancellare di volta in volta la figura).Il comando hold accetta un parametro, che pu` valere on (non cancella la figura) o off. Se invocato senza o parametri, varia lo stato attuale. Esempio figure(2) hold on plot(interval, sin(interval), ’r-;sin(x);’) plot(interval, cos(interval), ’b-;cos(x);’) hold off Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 50. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Il comando subplot Scopo e sintassi Lo scopo del comanto subplot ` quello di suddividere la figura attuale e in sotto-grafici, e di selezionare uno di essi per poterlo utilizzare. La sintassi ` subplot(nrows, ncols, index), dove nrows ed ncols e indicano la dimensione della griglia che si intende realizzare ed index ` e l’indice del grafico attuale, partendo dal grafico in altro a sinistra (indice 1) fino al grafico in basso a destra (indice nrows * ncols), facendo variare l’indice riga per riga. Griglia di esempio subplot(2, 3, 1) subplot(2, 3, 2) subplot(2, 3, 3) subplot(2, 3, 4) subplot(2, 3, 5) subplot(2, 3, 6) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 51. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Il comando subplot Scopo e sintassi Lo scopo del comanto subplot ` quello di suddividere la figura attuale e in sotto-grafici, e di selezionare uno di essi per poterlo utilizzare. La sintassi ` subplot(nrows, ncols, index), dove nrows ed ncols e indicano la dimensione della griglia che si intende realizzare ed index ` e l’indice del grafico attuale, partendo dal grafico in altro a sinistra (indice 1) fino al grafico in basso a destra (indice nrows * ncols), facendo variare l’indice riga per riga. Griglia di esempio subplot(2, 3, 1) subplot(2, 3, 2) subplot(2, 3, 3) subplot(2, 3, 4) subplot(2, 3, 5) subplot(2, 3, 6) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 52. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Esempio: plot multipli figure(3) subplot(3, 1, 1) plot(interval, sin(interval), ’r-;sin(x);’) subplot(3, 1, 2) hold on plot(interval, sin(interval), ’r-;sin(x);’) plot(interval, cos(interval), ’b-;cos(x);’) hold off subplot(3, 1, 3) plot(interval, cos(interval), ’b-;cos(x);’) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 53. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Titolo ed etichette Funzione title La funzione title prende come parametro una stringa ed ha l’effetto di aggiungere un titolo al grafico corrente. Le funzioni xlabel ed ylabel Queste due funzioni prendono come parametro una stringa ed aggiungono un’etichetta all’asse x (o all’asse y). Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 54. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Gestione assi cartesiani Funzione axis La funzione axis prende come primo parametro un vettore di 2, 4 o 6 numeri. I primi due numeri sono i limiti dell’asse x, i secondi due dell’asse y, gli ultimi due dell’asse z. Impostazione ticks La funzione gca restituisce il riferimento agli assi correnti. Con questo riferimento si possono impostare diverse propriet`, tra cui: a XTick e YTick, vettore contenente i valori da utilizzare per i ticks XTicklabel e YTicklabel, vettore contenente gli elementi da utilizzare come ticks La funzione da utilizzare per impostare le propriet` ` set(gca, ae propriet`, valore) a Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 55. Introduzione Il comando plot, sintassi di base Stili Grafici multipli Altre funzioni sui grafici Esempio figure(4) plot(interval, sin(interval)) axis([-2 * pi, 2 * pi, -1, 1]) set(gca, ’XTick’, -2 * pi: pi / 2: 2 * pi) set(gca, ’XTicklabel’, {’-2 pi’, ’- 3/2 pi’, ’- pi’, ’- pi/2’, ’0’, ’pi/2’, ’pi’, ’3/2 pi’, ’2 pi’}) title(’sin(x)’) xlabel(’x’) ylabel(’sin(x)’) Da provare sombrero peaks Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 56. Riferimenti Sito ufficiale di GNU Octave http://www.octave.org Documentazione John W. Eaton et al. GNU Octave Manual - http://www.gnu.org/software/octave/doc/interpreter/ Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output
  • 57. Licenza Licenza Creative Commons Questo lavoro ` rilasciato sotto licenza Creative Commons e Attribution-Share Alike 2.5 Italy (http://creativecommons.org/licenses/by-sa/2.5/it/) Significato della licenza La presentazione ` liberamente scaricabile e redistribuibile per e qualsiasi fine ` E necessario citare l’autore ` E necessario redistribuire secondo gli stessi termini eventuali lavori derivati da questa presentazione Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: strutture dati e input/output