2010-03-03 82 views
14

不知道在Mathematica中是否存在處理大型文件的方法? 目前我有一個約500Mb的表格數據文件。在Wolfram Mathematica中處理大型數據文件的方式

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

什麼是替代方式?

+0

這是怎麼回事? – kennytm 2010-03-03 12:35:45

+0

加載大文件需要太多時間。我也想太多的記憶。 – 2010-03-03 13:08:11

+3

在這裏再次提出類似的問題:http://stackoverflow.com/questions/7525782/import-big-files-arrays-with-mathematica。我爲密集和稀疏表提供了兩種解決方案,那些來到這個頁面的人可能會覺得有用。它們仍然非常慢,但比'Import'更有記憶效率。 – 2011-09-25 19:02:34

回答

13

使用OpenRead["file"]它給你一個InputStream對象,您可以使用Read[stream]。根據數據文件的格式,您可能需要在Read[]中爲RecordSeparators設置自定義選項值。

例子:

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

您需要記住完成後關閉流。另外,如果您中止操作,則流將保持打開狀態。這可能會導致令人討厭的驚喜。因此,我建議將讀取的代碼包裝在一個'CheckAbort'中以捕獲中止,然後關閉流而不管操作是否已中止。 – rcollyer 2010-03-05 15:43:42

+0

優秀點! – Timo 2010-03-05 22:22:51

4

您也可以將您的數據加載到使用DatabaseLink

+0

偉大的建議!謝謝 – 2010-03-21 23:08:02

1

功能的數據庫(例如MySQL的)和訪問它從數學DumpSave也可以保存大數據集的幫助。它以Mathematica的內部格式保存數據,因此在時間和文件大小方面效率更高。