2013-08-16 3 views
5

Ich habe ein Problem, das wie die Antwort scheint leicht zu erklären. Ich kämpfe meine Array-Elemente zu Schwimmern konvertieren (so dass ich multiplizieren können, auf sie hinzufügen usw.)Array kann nicht in Python schwebt

import csv 
import os 
import glob 
import numpy as np 

def get_data(filename): 
    with open(filename, 'r') as f: 
     reader = csv.reader(f)      
     return list(reader) 

all_data = [] 

path=raw_input('What is the directory?')  
for infile in glob.glob(os.path.join(path, '*.csv')): 
    all_data.extend(get_data(infile)) 
a = np.array(all_data) 
current_track_data=a[0:,[8,9,10,11,12]] 
abs_track_data=a[0:,7] 

und ich bekomme die Fehlermeldung:

> --------------------------------------------------------------------------- ValueError        Traceback (most recent call last) C:\Users\AClayton\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.0.3.1262.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc) 
    174    else: 
    175     filename = fname 
--> 176    exec compile(scripttext, filename, 'exec') in glob, loc 
    177  else: 
    178   def execfile(fname, *where): 
> 
> C:\Users\AClayton\Current\python begin\code_tester2.py in <module>() 
>  18 for infile in glob.glob(os.path.join(path, '*.csv')): # performs loop for each file in the specified path with extension .csv 
>  19  all_data.extend(get_data(infile)) 
> ---> 20  a = np.ndarray(all_data, dtype=float) 
>  21 
>  22  current_track_data=a[0:,[8,9,10,11,12]] 
> 
> ValueError: sequence too large; must be smaller than 32 
+1

Können Sie Ihren Code einsehen? Es stimmt nicht mit der Ausnahme überein. Ich sehe ein paar Unterschiede, einschließlich einiger Einrückungen. – Brionius

+0

Kannst du auch die Ausgabe von Zeile 19 anzeigen? – Dschoni

Antwort

11

Ihr Skript ist nicht das gleiche wie der Code, den Sie gepostet haben ... Wie die Rückverfolgung Ihres Fehlers zeigt, rufen Sie in Zeile 20 np.ndarray an. Das ist die numpy array object, nicht die np.arrayfactory function. Es sei denn, Sie wissen sehr gut, was Sie tun, folgen Sie der docs Beratung und:

Arrays should be constructed using array , zeros or empty (refer to the See Also section below). The parameters given here refer to a low-level method (ndarray(...)) for instantiating an array.

So Ihre Linie ändern # 20:

a = np.array(all_data, dtype=float) 

und Sie sollten in Ordnung sein.

Der Fehler, den Sie erhalten, kommt, weil ndarray Ihre erste Eingabe als die Form des Array verwendet, das erstellt werden soll. Es gibt ein begrenztes Limit für die Anzahl der Dimensionen, die auf meinem Windows-System auf 32 gesetzt sind (möglicherweise plattformabhängig, nicht sicher). Ihre all_data Liste hat mehr als 32 Einträge (oder was auch immer dieser Wert in Ihrem System ist), fälschlicherweise als Größen von Dimensionen interpretiert, und das ist es, was den Fehler auslöst.

+0

Sorry über den Fehler und die Verzögerung in der Antwort. Danke für die Hilfe in dieser Angelegenheit, ich hätte die Elemente für NDarray überprüft. Auch ich habe es jetzt in Array geändert und habe den Fehler: ValueError: Festlegen eines Array-Elements mit einer Sequenz. Ich nehme an Das liegt daran, dass ich es immer noch mit "all_data" einstelle? –

+0

Ich glaube, ich habe das Problem gefunden: Die letzte Zeile von all_data war nur halb voll mit Werten. Wenn ich die untere Reihe entferne, sollte es funktionieren ... –