Lekcja 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

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 } } ;

data // 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 — 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.

Export [ a.dat , data , Data ] ;

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

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

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

Export [ b.dat , Transpose [ data ] , Data ] ;

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.

data1 = Import [ 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 } }

data1 // 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.

DeleteFile [ { a.dat , b.dat } ]

FilePrint [ a.dat ]

General :: noopen : Cannot open ⁠ a.dat ⁠. "Cannot open \[NoBreak]\\!\\(\\\"a.dat\\\"\\)\[NoBreak]. \\!\\(\\*ButtonBox[\\\"\[RightSkeleton]\\\", ButtonStyle->\\\"Link\\\", ButtonFrame->None, ButtonData:>\\\"paclet:ref/message/General/noopen\\\", ButtonNote -> \\\"General::noopen\\\"]\\)"

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

Directory [ ]

/home/myszka

Inne typy plików: grafika

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

Export [ test.png , Integrate [ 1 / ( x ^ 4 - 1 ) , x ] ]

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:

Import [ test.png ]

przyklad7_1

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

Import [ test.png , Elements ]

{ BitDepth , ColorMap , ColorProfileData , ColorSpace , Comments , Data , Graphics , GrayLevels , Image , ImageSize , RawData , RGBColorArray }

jego rozmiary (“ImageSize”):

Import [ test.png , ImageSize ]

{ 327 , 34 }

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.

obrazek = Import [ test.png , Data ] ;

Dimensions [ obrazek ]

{ 34 , 327 , 3 }

obrazek [ [ 1 , 1 ] ]

{ 255 , 255 , 255 }