2013-08-16 18 views
5

Ho un problema che sembra che la risposta possa essere facilmente spiegata. Sto lottando per convertire i miei elementi di un array di carri (in modo che possa moltiplicare, aggiungere su di loro, ecc)Impossibile convertire la matrice in float python

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] 

e ottengo l'errore:

> --------------------------------------------------------------------------- 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

Potresti controllare il tuo codice? Non corrisponde a ciò che è nell'eccezione. Vedo alcune differenze, inclusa una rientranza. – Brionius

+0

Puoi anche mostrare l'output della riga 19? – Dschoni

risposta

11

Lo script non è la stessa come il codice che hai postato ... Come mostra il traceback del tuo errore, nella riga 20 stai chiamando np.ndarray. Questo è il numpy array object, non lo np.arrayfactory function. Se non si sa molto bene quello che state facendo, seguire il consiglio docs e:

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.

Quindi cambiare la vostra linea # 20 a:

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

e si dovrebbe andare bene.

L'errore che si sta verificando deriva dal fatto che ndarray prende il primo input come forma della matrice da creare. Esiste un limite harcoded al numero di dimensioni impostato su 32 sul mio sistema Windows (potrebbe dipendere dalla piattaforma, non è sicuro). L'elenco all_data contiene più di 32 voci (o qualunque valore sia presente nel sistema), erroneamente interpretate come dimensioni di dimensioni e questo è ciò che fa scattare l'errore.

+0

Ci scusiamo per l'errore e il ritardo nella risposta. Grazie per l'aiuto in merito, avrei controllato gli elementi per ndarray. Inoltre ora l'ho modificato in array e ho ricevuto l'errore: ValueError: impostazione di un elemento di matrice con una sequenza. Suppongo che sia perché sto ancora impostandolo con "all_data"? –

+0

Penso di aver trovato il problema: l'ultima riga di all_data era piena solo a metà dei valori. Se rimuovo la fila in basso dovrebbe funzionare ... –

Problemi correlati