2010-03-03 4 views
14

Je me demande s'il existe une façon de travailler avec des fichiers volumineux dans Mathematica? Actuellement, j'ai un fichier d'environ 500 Mo avec des données de table.Façon de traiter de gros fichiers de données dans Wolfram Mathematica

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

Quelle est la méthode alternative?

+0

Quel est le problème de cette façon? – kennytm

+0

cela prend trop de temps pour charger le gros fichier. et je pense trop de mémoire aussi. –

+3

Une question similaire a été posée une nouvelle fois ici: http://stackoverflow.com/questions/7525782/import-big-files-arrays-with-mathematica. J'ai donné deux solutions pour les tableaux denses et clairsemés, que ceux qui viennent à cette page pourraient trouver utiles. Ils sont encore plutôt lents, mais beaucoup plus efficaces en mémoire que 'Importer '. –

Répondre

13

Utilisez OpenRead["file"] qui vous donne un objet InputStream sur lequel vous pouvez utiliser Read[stream]. En fonction de la mise en forme du fichier de données, vous devrez peut-être définir des valeurs d'option personnalisées au Read[] pour RecordSeparators.

Exemple:

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

Vous devez vous rappeler de fermer le flux lorsque vous avez terminé. En outre, si vous annulez l'opération, le flux restera ouvert. Cela peut entraîner des mauvaises surprises. Donc, je vous recommande d'encapsuler votre code lu dans un 'CheckAbort' pour intercepter l'abandon, puis de fermer le flux, que l'opération ait été annulée ou non. – rcollyer

+0

Excellent point! – Timo

4

Vous pouvez également charger vos données dans une base de données (par exemple MySQL) et y accéder à partir de Mathematica en utilisant DatabaseLink

+0

bon conseil! Merci –

1

La fonction DumpSave peut également être utile pour enregistrer de grands ensembles de données. Il enregistre les données dans le format interne de Mathematica, il est donc plus efficace en termes de temps et de taille de fichier.

Questions connexes