2012-11-28 6 views
5

Quindi sono nuovo in Python e ho cercato questa risposta, ma la maggior parte delle risposte sono sopra la mia testa. Ho una lista come questa:Trovare la somma di una colonna in un elenco Ottenere "TypeError: impossibile eseguire riduzioni con il tipo flessibile"

right point point 1.76999998093 
right fear fear 1.62700009346 
right sit sit 1.46899986267 
right chord chord 1.47900009155 
right speed speeed 1.71300005913 
right system system 1.69799995422 
right hard hard 1.4470000267 
right excite excite 2.93799996376 
right govern govern 1.85800004005 
right record record 1.62400007248 

Sto cercando di dividere l'elenco in colonne e trovare la media/somma/Std dei numeri. Quindi, in pratica sto solo cercando di ottenere l'ultimo in un modulo array che posso usare np.mean, np.sum, ecc con. I dati sono in un file chiamato 'diritto' Ecco quello che ho finora:

right=open('right.txt').readlines() 
for line in right: 
    l=line.split() 
    righttime=l[3] 
    print righttime 

rightsum=np.sum(righttime) 
rightmean=np.mean(righttime) 

Allora ottengo questo errore: "TypeError: non è possibile eseguire ridurre di tipo flessibile" Ho provato un sacco di modi e mantenere ottenere errori. Questo è un altro modo in cui ho provato che sembrava promettente:

def TimeSum(data): 
    for line in data: 
     l=line.split() 
     righttime=l[3] 
     print righttime 
    return righttime 

rightsum=np.sum(TimeSum(right)) 

Ma ho avuto lo stesso errore. Qualcuno sa come fare questo?

risposta

7

generare un elenco e riassumere gli elementi:

import numpy as np 

right = open('right.txt').readlines() 
mylist = [] 

for line in right: 
    l = line.split() 
    mylist.append(float(l[3])) # add to list "mylist" 

rightsum = np.sum(mylist) 
print rightsum 

O, in alternativa

mylist = [float(line.split()[3]) for line in right] # generate numbers list 
print np.sum(mylist) # sum numbers 
+0

tu l'uomo felip. Grazie! –

+0

@EvanBrown Non pensarci! ;) – felipsmartins

4

È necessario specificare (sì, in modo esplicito) il tipo di dati, in questo caso, galleggiante (o int, qualunque cosa!):

rightsum = np.sum(float(righttime)) 
rightmean = np.mean(float(righttime)) 

Ricordate, è necessario fornire una struttura di "allineamento-like" per numpy .sum():

>>>import numpy as np 
>>> 
>>> mylist = [1, 5, 2] 
>>> a = np.asarray(mylist) 
>>> a.sum() 
8 

alternativa:

>>> np.sum([1,5,2]) 
8 
+0

immagino che fa parte della mia domanda anche. Ora ho isolato la colonna di numeri, ma non sono strutturati: 1,06500005722 1,27900004387 1,29099988937 1,64499998093 1,86100006104 1,35100007057 2,07699990273 1,54999995232 1,58100008965 E 'solo una colonna verticale di numeri. Ho provato a fare r = np.array (thelist) e r = np.asarray (thelist) ecc. Senza fortuna continuo a ricevere errori quando provo a fare la somma e la media. –

+0

vuoi sommare tutti i numeri? – felipsmartins

+0

sì tutti i numeri nell'ultima colonna? –