Mathematica: Tutorial 6

Import i eksport danych

Możliwości Mathematici pod tym względem są spore, choć bardzo specyficzne. Rozpatrzmy najprostszy przypadek. Poniżej dane. Jest to tablica o dwu kolumnach

In[]:= data = {{0.055, 90}, {0.091, 97}, {0.138, 107}, {0.167, 124}, {0.182, 142}, {0.211, 150}, {0.232, 172}, {0.248, 189}, {0.284, 209}, {0.351, 253}};
In[]:= data // MatrixForm
0.05590
0.09197
0.138107
0.167124
0.182142
0.211150
0.232172
0.248189
0.284209
0.351253

Polecenie zapisu na dysku wygląda tak jak poniżej. Plik zostanie zapisany w „bieżącej kartotece". Pierwszy parametr to nazwa, drugi — obiekt, który eksportujemy, trzeci — format danych. Powinien on być "Data" gdy chcemy wyeksportować dane numeryczne w postaci ASCII (czyli czytelnej). Rozszerzenie powinno być dat dla tego typu.

In[]:= Export["a.dat", data, "Data"];

Polecenie FilePrint czyta zawartość pliku i wyprowadza na ekran.

In[]:= FilePrint["a.dat"]

0.055 90 0.091 97 0.138 107 0.167 124 0.182 142 0.211 150 0.232 172 0.248 189 0.284 209 0.351 253

Tak na prawdę obiektem może być (prawie) dowolne wyrażenie.

In[]:= Export["b.dat", Transpose[data], "Data"];
In[]:= FilePrint["b.dat"]

0.055 0.091 0.138 0.167 0.182 0.211 0.232 0.248 0.284 0.351 90 97 107 124 142 150 172 189 209 253

Funkcja Import czyta plik, starając się (na podstawie rozszerzenia) zidentyfikować typ danych. więc wszystko powinno być OK.

In[]:= data1 = Import["b.dat"]
Out[]= {{0.055, 0.091, 0.138, 0.167, 0.182, 0.211, 0.232, 0.248, 0.284, 0.351}, {90, 97, 107, 124, 142, 150, 172, 189, 209, 253}}
In[]:= data1 // MatrixForm
0.0550.0910.1380.1670.1820.2110.2320.2480.2840.351
9097107124142150172189209253

Funkcja DeleteFile pozwala „posprzątać" czyli skasować zbędne pliki.

In[]:= DeleteFile[{"a.dat", "b.dat"}]
In[]:= FilePrint["a.dat"]

1erlok5ypz1hr

Out[]= FilePrint["a.dat"]

Jak widać pliku już nie ma. Polecenie Directory (bez parametrów) mówi nam jaka jest aktualnie „bieżąca kartoteka".

In[]:= Directory[]
Out[]= "/home/myszka"

Inne typy plików: grafika

Innymi rodzajami danych, którymi potrafi zajmować się Mathematica to obrazy:

In[]:= Export["test.png", Integrate[1/(x^4 - 1), x]]
Out[]= "test.png"

Polecenie jest dosyć niecodzienne: każę wykonać operację symbolicznego całkowania, a wynik (w postaci wyrażenia nie wykresu) zapisać do pliku graficznego. Sprawdźmy:

In[]:= Import["test.png"]

052ncm2cvn3wp

Łatwo się przekonać zaznaczając wynik, że jest to obrazek. Możemy zaimportować atrybuty obrazka (“Elements”).

In[]:= Import["test.png", "Elements"]
Out[]= {"AnimatedImage", "Animation", "AnimationRepetitions", "BitDepth", "BlendOperation", "CameraTopOrientation", "Channels", "ColorMap", "ColorProfileData", "ColorSpace", "Comments", "Data", "DateTime", "DisplayDurations", "DisposalOperation", "Exif", "FlashUsed", "GeoPosition", "GPSDateTime", "Graphics", "GraphicsList", "Image", "ImageCount", "ImageList", "IPTC", "MakerNote", "MetaInformation", "RasterSize", "RawData", "RawExif", "RawIPTC", "RawXMP", "RedEyeCorrection", "Summary", "SummarySlideView", "Thumbnail", "ThumbnailList", "XMP"}

jego rozmiary ("ImageSize"):

In[]:= Import["test.png", "ImageSize"]
Out[]= {367, 39}

Teraz dobierzemy się do danych. Wiemy, że są one tablicą typu RGBColorArray. Rozmiary obrazka to 34 wiersze po 327 pikseli każdy. A każdy piksel to trzy liczby: natężenie bazowych składowych.

In[]:= obrazek = Import["test.png", "Data"];
In[]:= Dimensions[obrazek]
Out[]= {39, 367, 3}
In[]:= obrazek[[1, 1]]
Out[]= {255, 254, 255}
Poprzedni
Następny