Die Datei hat mehrere Zeilen mit Komma Trennung, 3 Zahlen perline, mit Ausnahme der letzten nur 2
In [182]: fname='../Downloads/pastie-10860707.txt'
In [183]: np.fromregex(fname,regexp=pattern,dtype=float)
...
np.fromregex(fname,regexp=pattern,dtype=float)
/usr/lib/python3/dist-packages/numpy/lib/npyio.py in fromregex(file, regexp, dtype)
1240 # Create the new array as a single data-type and then
1241 # re-interpret as a single-field structured array.
-> 1242 newdtype = np.dtype(dtype[dtype.names[0]])
1243 output = np.array(seq, dtype=newdtype)
1244 output.dtype = dtype
TypeError: 'NoneType' object is not subscriptable
Geladen mit einem einfachen 'br' gelesen hat, wird die Datei wie folgt aussieht:
In [184]: txt
Out[184]: b'2.75386225e+00,1.80508078e+00,2.95729122e+00,\n-4.21413726e+00, -3.38139076e+00, -4.22751379e+00,\n ... 4.23010784e-01, -1.14839331e+00, -9.56098910e-01,\n -1.15019836e+00, 1.13845303e-06'
Diese fehlende Nummer in der letzten Zeile wird genfromtxt
Probleme geben.
Ihre Wahl des Musters ist falsch. Es sieht wie ein Trennzeichenmuster aus. Aber das Muster in fromregex
docs produziert Gruppen:
regexp = r"(\\d+)\\s+(...)"
fromregex
tut
seq = regexp.findall(file.read()) # read whole file and group it
output = np.array(seq, dtype=dtype) # make array from seq
Wenn Sie fromregex
verwenden wollen, müssen Sie mit einem Muster zu entwickeln, die eine Liste von Tupeln erzeugt, die gedreht werden kann, in ein Array direkt.
================
Obwohl die Suche wieder auf dem Fehler messsage ich sehe, dass das unmittelbare Problem mit den dtype
ist. dtype=float
ist keine gültige Dtypspezifikation für diese Funktion. Es erwartet einen zusammengesetzten dtype (strukturiert).
Der Fehler wird durch diese Aktion erzeugt, wo float
Ihre dtype
Parameter sind:
In [189]: np.dtype(float).names[0]
...
TypeError: 'NoneType' object is not subscriptable
Aber es versucht, dies zu tun, weil das Muster
In [194]: pattern.findall(txt)
Out[194]:
[b',',
b',',
b',',
b'\n',
b',',
b' ',
b' ',
....]
nicht die Liste von Tupeln erzeugt hat, das es erwartet.
==================
ich die Datei mit
In [213]: np.genfromtxt(txt.splitlines(),delimiter=',',usecols=[0,1])
Out[213]:
array([[ 2.75386225e+00, 1.80508078e+00],
[ -4.21413726e+00, -3.38139076e+00],
[ 7.46991792e-01, -1.08010066e+00],
...
[ 4.23010784e-01, -1.14839331e+00],
[ -1.15019836e+00, 1.13845303e-06]])
laden kann ich usecols
bin mit vorübergehend, um das Problem zu bekommen mit nur 2 Nummern in der letzten Zeile.
Wenn ich die \n
entfernen und es in Kommas aufteilen, kann ich die resultierenden Textfelder direkt mit np.array
analysieren.
In [231]: txt1=txt.replace(b'\n',b'').split(b',')
In [232]: np.array(txt1,float)
Out[232]:
array([ 2.75386225e+00, 1.80508078e+00, 2.95729122e+00,
-4.21413726e+00, -3.38139076e+00, -4.22751379e+00,
...
4.23010784e-01, -1.14839331e+00, -9.56098910e-01,
-1.15019836e+00, 1.13845303e-06])
Dieses Muster enthält die dezimale und wissenschaftliche Notation:
In [266]: pattern=re.compile(br"(\d+\.\d+e[\+\-]\d+)")
In [267]: np.fromregex(fname,regexp=pattern,dtype=np.dtype([('f0',float)]))['f0']
Out[267]:
array([ 2.75386225e+00, 1.80508078e+00, 2.95729122e+00,
4.21413726e+00, 3.38139076e+00, 4.22751379e+00,
...
4.23010784e-01, 1.14839331e+00, 9.56098910e-01,
1.15019836e+00, 1.13845303e-06])
Vorerst Ich bin ein strukturiertes Array zu schaffen und dieses Feld zu extrahieren. Vielleicht gibt es einen Weg dahin. Aber fromregex
scheint die Verwendung von strukturierten dtypes zu bevorzugen.
Bitte buchen Sie die vollständige Traceback. – kindall
Sie verwenden nicht einmal 'np.genfromtxt' in Ihrem geposteten Code. – user2357112
Bitte veröffentlichen Sie keine Daten auf externen Websites. Kopiere es in deine Frage. – MattDMo