2016-07-28 5 views
0

Ich habe mehrere Textdateien in einem Ordner, alle mit Daten in Form von Zahlen, jeweils getrennt durch 3 Leerzeichen. Es gibt keine Zeilenumbrüche. Ich möchte die Zahlen nehmen, sie in ein numpliges Array ordnen und sie dann zu einem 240 mal 240 Array umformen. (Ich habe dafür die richtige Anzahl von Datenpunkten in jeder Datei.) Danach möchte ich, dass mein Array grafisch angezeigt wird, und dann dasselbe für die nächste Datei. Allerdings halte meine Versuche mein Fehler geben, die sagen:Aufteilen von Zeilen und Hinzufügen von Zahlen zu einem Nummernfeld

"'unicodeescape' codec can't decode bytes in position 10-11: malformed \N character escape." 

Mein Code so weit ist:

import numpy as np 
import matplotlib.pyplot as plt 
a = np.array([]) 
import glob, os 
os.chdir("/mydirectory") 
for file in glob.glob("*.txt"): 
    for line in file: 
     numbers = line.split(' ') 
     for number in numbers: 
      a.np.append([number]) 
    b = a.reshape(240,240) 
    plt.imshow(b) 
    a = np.array([]) 
+0

haben Sie bei numpy.loadtxt geschaut? –

Antwort

2

Es klingt wie eine Nummer mit einer der Dateien zu lesen. Ich würde vorschlagen, zuerst einen

und sicherzustellen, dass die Linien richtig aussehen. Sie können auch eine strip

In [244]: [int(x) for x in '121 342 123\n'.strip().split(' ')] 
Out[244]: [121, 342, 123] 

Aber diese Looping Struktur ist auch schlecht hinzufügen möchten. Es ist ein Missbrauch von np.append

a = np.array([]) 
.... 
for number in numbers: 
    a.np.append([number]) 

In [245]: a=np.array([]) 
In [246]: a.np.append(['123']) 
... 
AttributeError: 'numpy.ndarray' object has no attribute 'np' 

In [247]: a.append(['123']) 
... 
AttributeError: 'numpy.ndarray' object has no attribute 'append' 

In [248]: np.append(a,['123']) 
Out[248]: 
array(['123'], 
     dtype='<U32') 
In [249]: a 
Out[249]: array([], dtype=float64) 

np.append gibt ein neues Array; Es ändert sich nicht a Inplace.

Sie wollen Werte in der Liste (oder Listen von Listen) sammeln, oder zumindest eine Liste von ganzen Zahlen np.array passieren:

In [250]: np.array([int(x) for x in '121 342 123\n'.strip().split(' ')]) 
Out[250]: array([121, 342, 123]) 
+0

Danke. Das war sehr nützlich – Evan

Verwandte Themen