2010-03-03 13 views
14

Zastanawiam się, czy istnieje sposób pracy z dużymi plikami w Mathematica? Obecnie mam plik około 500 MB z danymi tabeli.Sposób radzenia sobie z dużymi plikami danych w Wolfram Mathematica

Import["data.txt","Table"]; 

Co to jest alternatywa?

+0

Co jest nie tak w ten sposób? – kennytm

+0

Ładowanie dużego pliku trwa zbyt długo. i myślę, że też za dużo pamięci. –

+3

Podobne pytanie zadano ponownie tutaj: http://stackoverflow.com/questions/7525782/import-big-files-arrays-with-mathematica. Podałem dwa rozwiązania dla gęstych i rzadkich tabel, które mogą znaleźć się na tych stronach. Są nadal dość powolne, ale o wiele bardziej wydajne pod względem pamięci niż "Importuj". –

Odpowiedz

13

Użyj OpenRead["file"], który daje obiekt InputStream, w którym można użyć Read[stream]. W zależności od formatowania pliku danych może być konieczne ustawienie niestandardowych wartości opcji w Read[] dla RecordSeparators.

Przykład:

In[1]:= str = OpenRead["ExampleData/USConstitution.txt"]  
Out[1]= InputStream["ExampleData/USConstitution.txt", 24] 

In[2]:= Read[str, Word]  
Out[2]= "We"  
In[3]:= Read[str, Word] 
Out[3]= "the"  
In[4]:= Read[str, Record] 
Out[4]= "People of the United States, in Order to form a more perfect Union," 
+8

Musisz pamiętać, aby zamknąć strumień po zakończeniu. Ponadto, jeśli przerwiesz operację, strumień pozostanie otwarty. Może to spowodować nieprzyjemne niespodzianki. Polecam więc owijając odczytany kod w 'CheckAbort', aby złapać przerwanie, a następnie zamknij strumień niezależnie od tego, czy operacja została przerwana, czy nie. – rcollyer

+0

Doskonały punkt! – Timo

4

Można również wczytać dane do bazy danych (na przykład MySQL) i do niego dostęp z Mathematica wykorzystaniem DatabaseLink

+0

świetna rada! dzięki –

1

Funkcja DumpSave mogą być również przydatne do zapisywania dużych zbiorów danych. Zapisuje dane w wewnętrznym formacie Mathematica, dzięki czemu jest bardziej wydajna zarówno pod względem czasu, jak i wielkości pliku.

Powiązane problemy