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[1]:= 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[2]:= data//MatrixForm
Out[2]//MatrixForm= (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
)
Polecenie zapisu na dysku wygląda tak jak poniżej. Plik zostanie zapisany w „bieżącej kartotece". Pierwszy parametr to nazwa, drugi [LongDash] obiekt, który eksportujemy, trzeci [LongDash] format danych. Powinien on być “Data” gdy chcemy wyeksportować dane numeryczne w postaci ASCII (czyli czytelnej). Rozszerzenie powinno być dat dla tego typu.
In[3]:= Export["a.dat",data,"Data"];
Polecenie FilePrint czyta zawartość pliku i wyprowadza na ekran.
In[4]:= FilePrint["a.dat"]
During evaluation of In[4]:=
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[5]:= Export["b.dat",Transpose[data],"Data"];
In[6]:= FilePrint["b.dat"]
During evaluation of In[6]:=
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[7]:= data1=Import["b.dat"]
Out[7]= {{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[8]:= data1//MatrixForm
Out[8]//MatrixForm= (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 DeleteFile pozwala „posprzątać" czyli skasować zbędne pliki.
In[9]:= DeleteFile[{"a.dat","b.dat"}]
In[10]:= FilePrint["a.dat"]
During evaluation of In[10]:= General::noopen: Cannot open a.dat.
Out[10]= FilePrint[a.dat]
Jak widać pliku już nie ma. Polecenie Directory (bez parametrów) mówi nam jaka jest aktualnie „bieżąca kartoteka".
In[11]:= Directory[]
Out[11]= /home/myszka
Inne typy plików: grafika
Innymi rodzajami danych, którymi potrafi zajmować się Mathematica to obrazy:
In[12]:= Export["test.png",Integrate[1/(x^4-1),x]]
Out[12]= 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[13]:= Import["test.png"]
Out[13]=
Łatwo się przekonać zaznaczając wynik, że jest to obrazek. Możemy zaimportować atrybuty obrazka ("Elements"
).
In[14]:= Import["test.png","Elements"]
Out[14]= {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[15]:= Import["test.png","ImageSize"]
Out[15]= {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[16]:= obrazek=Import["test.png","Data"];
In[17]:= Dimensions[obrazek]
Out[17]= {39,367,3}
In[18]:= obrazek[[1,1]]
Out[18]= {255,255,255}