Entfernen dtype am Ende der numpy-array
Schreibe ich eine Methode erstellt ein array von Daten-Datei. Die Methode sieht folgendermaßen aus:
import numpy
def readDataFile(fileName):
try:
with open(fileName, 'r') as inputs:
data = None
for line in inputs:
line = line.strip()
items = line.split('\t')
if data == None:
data = numpy.array(items[0:len(items)])
else:
data = numpy.vstack((data, items[0:len(items)]))
return numpy.array(data)
except IOError as ioerr:
print 'IOError: ', ioerr
return None
Meine Daten-Datei enthält Zeilen von zahlen, die jeweils voneinander getrennt durch einen Tabulator, e.g:
1 2 3
4 5 6
7 8 9
Und ich erwarten ein array wie folgt:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Jedoch enthält das Ergebnis dtype
am Ende:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype='|S9')
Weil es, ich kann nicht führen Sie einige Operationen auf das Ergebnis, wenn ich z.B. versuchen zu finden, der max-Wert für jede Zeile mit result.max(0)
werde ich eine Fehlermeldung:
TypeError: cannot perform reduzieren mit flexibler Typ.
So, kann mir jemand sagen was stimmt mit meinem code und wie man es beheben? Vielen Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfachste Korrektur ist die Verwendung von numpy ist loadtxt:
Nur zur info, mit
numpy.vstack
innerhalb einer Schleife ist eine schlechte Idee. Wenn Sie sich entscheiden nicht zu verwendenloadtxt
können Sie ersetzen Sie Ihre Schleife, mit der folgenden zu beheben, dtype Problem und die Beseitigung dernumpy.vstack
.Update
Jedes mal vstack genannt wird, es macht ein neues array und kopiert den Inhalt des alten arrays in das neue. Dieses Exemplar ist etwa O(n), wobei n die Größe des Arrays und wenn deine Schleife läuft n-mal die ganze Sache wird O(n**2), also langsam. Wenn Sie wissen, die endgültige Größe des Arrays vor der Zeit, ist es besser, erstellen Sie das array außerhalb der Schleife und füllen Sie das vorhandene array. Wenn Sie nicht wissen, die endgültige Größe des Arrays verwenden, können Sie eine Liste der innerhalb der Schleife und rufen vstack am Ende. Zum Beispiel:
Hier ändern, gehen Sie wie Datentypen in numpy:
Numpy-array enthält eine Methode, um diesen job zu machen:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tolist.html#numpy.ndarray.tolist
... Haben Sie versucht, drehen Sie Sie in die Reihen zuerst?