2016-06-30 4 views
2

Ich weiß Matlab hat einige nette Syntax, wo Sie in eine Datei-Array-Definitionen, wie A = [[1,2,3],..., und dann können Sie diese Datei importieren und alle diese Definitionen werden automatisch gelesen. Ich würde gerne etwas Ähnliches in Python machen. Im Grunde suche ich nach dem einfachsten Weg, Tabellendaten aus einer Datei zu lesen, und das resultierende Objekt als numpy Array-Instanzen zu haben. Was ist der einfachste Weg, dies zu erreichen? (? Oder die Pythonic Weg)Was ist der einfachste Weg, Array-Daten aus einer Datei in Python zu laden?

die Daten in der Datei Say ist wie folgt:

Array1 
1 0 0 0 
2 1 0 0 
3 0.3333333333325028 0 0 
4 0.6666666666657888 0 0 

Array2 
1 1 1 1 
2 3 1 1 
3 2 2 2 
4 3 2 2 
5 1 1 3 
6 1 3 4 
7 1 4 2 
+0

Das 'csv'-Format ist praktisch, wenn alle Zeilen die gleiche Anzahl von Spalten haben und Sie ein Array (oder eine Tabelle) möchten. Aber bei mehreren Arrays ist das 'csv'-Format umständlich. – hpaulj

Antwort

2

Datei test1.py:

#!/usr/bin/python 
a=[1,2,3,4,5,6] 

Datei test.py:

#!/usr/bin/python 

import test1 

print test1.a 

Jetzt, wenn Sie Test ausführen .py:

$ ./test.py 
[1, 2, 3, 4, 5, 6] 
+0

Danke für die Antwort. Ich habe mir diesen Weg angesehen, aber ich mag die Tatsache nicht, dass die Daten in einer Moduldatei sind. Gibt es eine andere Art und Weise? Wenn die Daten nicht richtig formatiert sind, möchte ich sie trotzdem lesen können, ohne sie zu unterbrechen. – aaragon

+0

Dies ist der einfachste Weg AFAIK, wenn Sie zusätzliche Funktionen wie eine benutzerdefinierte Textdatei mit benutzerdefinierten Formaten und/oder erlauben lose eingegebene Daten benötigen, dann wird es nicht mehr das einfachste – Jahid

+0

Es kann die einfachste sein, aber es ist auch ziemlich gefährlich nicht wahr? Jeder könnte einfach schlechten Code schreiben, der ausgeführt wird. – aaragon

2

Was Jahid unten gesagt hat funktioniert gut, wenn Sie Ihre Daten in Python-Module setzen möchten.

Wenn Sie andererseits lieber Ihre Daten in einer separaten Datei, z. eine Textdatei, und lesen Sie es dann in einem Skript, möchten Sie vielleicht numpy.loadtxt verwenden (es wurde entwickelt, um matrixartige Dateien automatisch in numply Arrays zu lesen).

http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html

+0

Ich fand [diesen Artikel] (http://akuederle.com/stop-using-numpy-loadtxt), wo diese Funktion nicht empfohlen wird. Was ist mit Pandas? – aaragon

+0

Wie werden Sie die Daten verwenden, sobald sie sich in Ihrem Arbeitsbereich befinden? Wenn Pandas-Datenrahmen und -Serien für Sie sinnvoll sind, verwenden Sie den Pandas Loader. Aber wenn du nur "numpy" verwendest, bleibe bei 'loadtxt' (oder' genfromtxt'). Der einzige Grund, den Artikel für die Verwendung von Pandas gab, ist Geschwindigkeit. – hpaulj

+0

Ich brauche grundsätzlich numpy Arrays, nachdem ich die Daten gelesen habe, obwohl die Arrays verschiedene Typen haben. Ich werde es nochmal mit diesen Funktionen versuchen. – aaragon

0

Was möchten Sie wahrscheinlich Ihre Daten in der yaml Dateiformat setzen. Es ist ein Textdatenformat, dessen Struktur auf höheren Skriptsprachen wie Python basiert. Sie können mehrere 2D-Arrays beliebiger Typen einfügen. Da es sich jedoch nur um Daten und nicht um Code handelt, ist es nicht so gefährlich wie das direkte Einfügen der Daten in ein Python-Skript. Es kann ziemlich leicht 2D arrays oder streng verschachtelte Listen machen (siehe Beispiel 2.5 bei diesem Link speziell), ebenso wie das Äquivalent von gewöhnlichen Listen, Dicts, verschachtelten Dicts, Strings und einer beliebigen Kombination davon. Da Sie einen Datentyp in einen anderen verschachteln können, können Sie beispielsweise ein Wörterbuch mit 2D-Arrays erstellen, mit dem Sie mehrere Arrays in einer einzigen Datei speichern können.

Hier ist dein Beispiel in yaml:

Array1: 
- [1, 0, 0, 0] 
- [2, 1, 0, 0] 
- [3, 0.3333333333325028, 0, 0] 
- [4, 0.6666666666657888, 0, 0] 

Array2: 
- [1, 1, 1, 1] 
- [2, 3, 1, 1] 
- [3, 2, 2, 2] 
- [4, 3, 2, 2] 
- [5, 1, 1, 3] 
- [6, 1, 3, 4] 
- [7, 1, 4, 2] 

Und hier ist, wie es in numpy Arrays zu lesen (die Datei "temp.yaml" in meinem Beispiel genannt), mit dem PyYaml Paket:

>>> import yaml 
>>> 
>>> with open('temp.yaml') as ym: 
.... res = yaml.load(ym) 
>>> res 
{'Array1': [[1, 0, 0, 0], 
    [2, 1, 0, 0], 
    [3, 0.3333333333325028, 0, 0], 
    [4, 0.6666666666657888, 0, 0]], 
'Array2': [[1, 1, 1, 1], 
    [2, 3, 1, 1], 
    [3, 2, 2, 2], 
    [4, 3, 2, 2], 
    [5, 1, 1, 3], 
    [6, 1, 3, 4], 
    [7, 1, 4, 2]]} 
>>> array1 = np.array(res['Array1']) 
>>> array2 = np.array(res['Array2']) 
>>> print(array1) 
[[ 1.   0.   0.   0.  ] 
[ 2.   1.   0.   0.  ] 
[ 3.   0.33333333 0.   0.  ] 
[ 4.   0.66666667 0.   0.  ]] 
>>> print(array2) 
[[1 1 1 1] 
[2 3 1 1] 
[3 2 2 2] 
[4 3 2 2] 
[5 1 1 3] 
[6 1 3 4] 
[7 1 4 2]] 
Verwandte Themen