2017-03-21 10 views
4

Ich habe Probleme beim Lesen komplexe Zahl aus einer CSV-Datei. Das Format der Datei ist das folgende:Lesen Sie komplexe Zahlen aus einer CSV-Datei mit Python

(-353.10438 +j1.72317617),(-23.16000 +j0.72512251) 

Ich habe versucht, die Daten zu importieren numpy.genfromtxt mit:

data=genfromtxt(fname, dtype=complex, skip_header=10, skip_footer=212, delimiter=',') 

Aber jedes Mal, wenn ich einen komplexen Eintrag habe es mich zurück nan+0.j. Ich habe auch versucht, die Klammern vor und nach der Nummer zu entfernen und die durch 1j* ersetzt, aber es hat nicht funktioniert.

Irgendwelche Vorschläge? Danke

+1

@AshishNitinPatil: genfromtxt ist in numpy. –

+0

Vermutlich meinst du, dass du versucht hast * die Daten mit genfromtxt * zu importieren? –

+0

@BillBell ja, du hast Recht. behoben – gian9

Antwort

4

Ich habe jedes 'j' an die Position unmittelbar hinter dem imaginären Teil der komplexen Zahl verschoben und alle Leerzeichen herausgequetscht, um eine Beispieldatei wie diese zu erhalten.

(-353.10438+1.72317617j),(-23.16000+0.72512251j) 
(-353.10438+1.72317617j),(-23.16000+0.72512251j) 
(-353.10438+1.72317617j),(-23.16000+0.72512251j) 
(-353.10438+1.72317617j),(-23.16000+0.72512251j) 

Dann lief ich Code ähnlich wie deins mit einem Ergebnis ähnlich wie folgt.

>>> np.genfromtxt('fname.txt', dtype=complex, delimiter=',') 
array([[-353.10438+1.72317617j, -23.16000+0.72512251j], 
     [-353.10438+1.72317617j, -23.16000+0.72512251j], 
     [-353.10438+1.72317617j, -23.16000+0.72512251j], 
     [-353.10438+1.72317617j, -23.16000+0.72512251j]]) 

Ich weiß nicht genau, was Sie ähnliche Ergebnisse bekommen könnte zu tun haben, wenn in der Tat dieser Ansatz überhaupt für Sie arbeiten.

Viel Glück!

+0

Ich schaffte es, indem Sie tun, wie Sie sagten und den Raum vor dem + zu beseitigen. Vielen Dank! – gian9

+0

Sie sind herzlich willkommen! –

3

können Sie

np.complex(str(a).replace('j', '') + 'j' 

zum ersten Wurf in einen String verwenden, dann verschieben, um die ‚j‘ und zu einer komplexen Zahl zurückgeworfen.

+1

Ich verwendete ersetzen von den Daten direkt. 'data = fname.read()' und als 'data = data.replace()' Aber ich denke, es ist genau das selbe wie du gesagt hast – gian9

+0

Ja, das Ersetzen kannst du verwenden, wenn .. kurz vor dem eigentlichen Parse zu einem Komplex Zahl, da diese immer in der Form "a + bj" sein muss, um richtig zu wirken. – rammelmueller

Verwandte Themen