vuoi
o PayPal
tutte le volte che vuoi
<div>
Scarica il
</div>Daniele Lupo Appunti di Mathematica
Importazione ed
esportazione
ü Introduzione
Abbiamo visto le potenzialità di Mathematica per quanto riguarda il calcolo simbolico e numerico.
Tuttavia, nonostante abbiamo imparato a fare un sacco di cose, ci siamo limitati a lavorare sempre
all'interno del programma. Molte volte, invece (poche, a dire il vero, se siamo studenti), capita di
dover effettuare delle elaborazioni su dei dati acquisiti esternamente al programma, oppure vogliamo
esportare i dati in modo che possano essere utilizzati da altri programmi. Lo scambio dei dati fra
programmi è un concetto importante da imparare, specie se bisogna lavorare molto al calcolatore per
elaborare e sviluppare le opportune ricerche. Per esempio, si usa un programma in C ideato da
un'altra persona, per effettuare una simulazione, salvando i risultati in un file, e dopo si vogliono
importare questi dati per vedere se effettivamente sono come ce li aspetiamo. oppure, magari,
potremmo usare i dati derivati da un oscilloscopio campionatore per effettuare analisi che
l'oscilloscopio non è in grado di eseguire, per esempio se non è in grado di effettuare la trasformata
di Fourier dei campioni (anche se probabilmente riesce a farlo se è anche solo sufficiente come
strumento, ma parlo solo di esempi). Le applicazioni sono tutte importanti, e Mathematica le gestisce
praticamente tutte, da entrambi i sensi. Vediamo, quindi, cosa possiamo fare per elaborare con
Mathematica i nostri dati.
ü Importazione
Mathematica è in grado di importare una quantità di file di diverso formato: file di testo, immagini e
quant'altro. Esiste una variabile di sistema che elenca tutti i possibili formati di file che si possono
importare:
$ImportFormats
8AIFF, APS, AU, Bit, BMP, Byte, Character16, Character8, Complex128,
Complex256, Complex64, CSV, DICOM, DIF, Dump, DXF, EPSTIFF,
Expression, ExpressionML, FITS, GIF, HarwellBoeing, HDF, HDF5,
Integer128, Integer16, Integer32, Integer64, Integer8, JPEG, Lines,
List, MAT, MathML, MGF, MPS, MTX, NB, NotebookML, PBM, PCX, PGM,
PNG, PNM, PPM, Real128, Real32, Real64, SDTS, SND, STL, String,
SymbolicXML, Table, TerminatedString, Text, TIFF, TSV, UnicodeText,
UnsignedInteger128, UnsignedInteger16, UnsignedInteger32,
UnsignedInteger64, UnsignedInteger8, WAV, Words, XBitmap, XLS, XML<
180
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Fra i molti che non conosco neanch'io, potete notare i formati più conosciuti, come BMP, JPEG,
WAV, Text, e, importante soprattutto per la compatibilità con i programmi più moderni, XML.
Questa lista ovviamente dipende dalla versione del programma posseduta (la mia è la 5.1), ma la
maggior parte dei file più comuni rimane invariata.
Il comando usato per importare dei dati è il seguente:
importa una tavola di dati da un file
Import["file", "Table"]
La seconda opzione dice in particolar modo al programma in quale modo sono organizzati i file nel
file. Per i file di testo le opzioni più comuni sono:
¤ CSV: valori tabulari separati da una virgola.
¤ Lines: linee di testo.
¤ List: linee che sono formate più valori.
¤ Table: matrice bidimensionale di numeri oppure stringhe.
¤ Text: strnga di caratteri ordinari.
¤ TSV: tabella di testo con valori separati da tabulazione.
¤ UnicodeText: stringhe di caratteri Unicode di 16 bit.
¤ Words: parole separate da spazi o da ritorni a capo.
¤ XLS: formato di foglio di calcolo di Excel.
Supponiamo di voler importare una lista di dati:
Come potete vedere, l'importazione di un'immagine è cosa alquanto semplice e rapida
=
dati Import@"D:\\Documenti\\dati.txt", "List"D
812312, 124314, 1312, 3123, 123, 123, 1, 41, 4, 35, 4, 543,
635, 67, 5735, 3, 524, 52, 6, 264, 2, 62, 46, 53, 4, 23, 542<
Prima di continuare, notate come sono definiti i percorsi di file in Mathematica: infatti, usa una
notazione propria, che è indipendente dalla macchina e dal sistema operativo che si sta usando. Per
poter importare un file, è necessario il percorso assoluto, a meno che non si trovi nella cartella del
programma, cosa che fra l'altro vi sconsiglio di fare. Meglio tenere sempre separati programmi e
dati, come chiunque in vita sua ha provato almeno una volta a fare un backup sa bene. Per
semplificarvi la vita, potete usare la voce di menù del programma Input->Get File Path, che vi scrive
181
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
direttamente il percorso quando scegliete il file da una finestra di Esplora Risorse. Detto questo,
possiamo andare avanti...
Come possiamo vedere, abbiamo appena importato il nostro file, con i valori contenuti in esso
raggruppati nella lista: →
ListPlot@dati, PlotJoined TrueD
3000
2500
2000
1500
1000
500 5 10 15 20 25
Graphics
Avendo la lista, adesso possiamo trattarla esattamente come abbiamo imparato fino ad adesso
possiamo elaborarla, estrarre valori, farne la trasformata di Fourier... Tutto quello che ci serve,
insomma. Possiamo anche importare formati grafici:
=
cane Import@"D:\\Documenti\\Immagini\\dog02.jpg"D
Graphics
E possiamo visualizzarlo esattamente come se fosse una primitiva grafica di tipo Raster:
182
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Show@caneD
Graphics
Tuttavia, sebbene sia abbastanza semplice importare le immagini, estrarne i dati per le elaborazioni
richede un passaggio in più.
=
evanescence Import@
"D:\\Documenti\\Immagini\\EvanescenceFallenGroupWallpaper.jpg"D;
Show@evanescenceD
Graphics 183
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Possiamo vedere come sia stata importata l'immagine nel suo complesso. Tuttavia, possiamo notare
che, nel caso di immagini, importiamo oggetti grafici, che possono essere usati solo come tali.
Invece, può capitare che un'immagine ci serva come matrice, nel senso che ogni pixel contiene valori
numerici che ci interessano per elaborazioni numeriche. In questo caso, ci serve la lista che
Mathematica usa per rappresentare l'immagine raster.
Shallow@InputForm@evanescenceDD
>>D, >>D, >>D, >>DD
Graphics@Raster@<< 4 Rule@<< 2 Rule@<< 2 Rule@<< 2
Il comando Shallow permette di rappresentare in forma abbreviata il contenuto di un comando o di
una variabile. Vedremo in una delle sezioni successive più in dettaglio questo comando. Per ora ci
basti sapere che serve per visualizzare brevemente il contenuto di qualsiasi cosa esista in
Mathematica.
Possiamo vedere che la variabile evanescence che rappresenta il formato grafico è formato dal
comando Raster, più tre regole. sappiamo che il comando Raster richiede una lista di dati da
visualizzare, per cui la lista che ci interessa si trova proprio lì dentro. Possiamo estrarre direttamente
la lista dal formato grafico, nel seguente modo:
=
dati evanescence@@1, 1DD;
Short@dati, 4D
8 <
1
Con il comando Short vediamo una rappresentazione riassunta del contenuto di qualcosa. L'ho
dovuta usare perchè i dati di un'immagine sono numerosi, ed avrebbero riempito decine di pagine. Si
può vedere che, per un'immagine, i dati sono rappresentati da una matrice, i cui elementi sono a loro
volta delle liste di tre numeri, rappresentanti rispettivamente i valori Rosso, Verde e Blu del pixel.
Una volta ottenuta la lista, possiamo elaborarla come più ci piace.
Naturalmente, possiamo effettuare tutte le operazioni di elaborazione delle immagini che vogliamo.
Soltanto che non è che conosca bene cose come il filtro di Kalman oppure algoritmi di
convoluzione... accontentatevi di questo esempio stupido ed anzi, se sapete suggerirmi qualche
algoritmo di elaborazione dei segnali particolarmente simpatico, sarò bel lieto di usarlo...
In questo caso, andiamo ad usare una matrice di convoluzione per trasformare la nostra immagine da
matrice di tre valori, a matrice di singoli valori, applicando un certo effetto, quindi trasformata in
scala di grigi. Andiamo a definire il nostro tensore:
184
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
8
=
88−1, 81, 81,
kernel −1, −1,
881, 8−2, 81,
0<, 0, 1<, 1<<,
−5, −1<,
881, 81, 8−1,
1, 1<, 1, 1<<,
−1<<
<; 1, 1<, 1, 1<, 0,
Una volta creata la nostra matrice di convouzione, andiamo ad applicarla alla nostra immagine, o
meglio, alla lista di valori ad essa correlata (dato che la sola importazione comporta la creazione non
della lista, ma di un