2015-07-22 8 views
5

Ich habe eine große Liste von Listen, so etwas wieDurchschnitt über Teile in der Liste der Listen

import numpy as np 
np.array([range(1,1000), range(1,1000), range(1,1000)]) 

Und ich mag die durchschnittlich 50 Werte jeweils in jeder Spalte berechnen. Ich möchte etwas bekommen, wie:

np.array([[np.mean(range(1,50)), np.mean(range(51,100)), ...], [[np.mean(range(1,50)), np.mean(range(51,100)), ...], ...]) 

Aber anstatt Werte 1-1000 ich mehrere Textdateien mit einer Spalte jeder, und ich packte sie zusammen in der np.array mit

average_list = np.array([ np.genfromtxt("1.txt"), np.genfromtxt("2.txt") ]) 

ich habe versucht, über Teile der Liste Looping und zusammen 50 Werte hinzufügen, aber es scheint nicht zu tun, was ich will es

average_list = np.array([ np.genfromtxt("1.txt"), np.genfromtxt("2.txt") ]) 
new_list = [] 
n=100 
for i in range(len(average_list)): 
    for j in range(len(average_list[i])): 
     while n < j < n+50: 
      average_list[i,j]+=average_list[i,j+1] 
      j+=1 
      new_list.append(average_list[i,j]) 
     print new_list 
     n+=50 
+1

Haben Sie versucht, dieses Problem zu lösen? Wenn Sie haben, fügen Sie Ihren Code und Forschung in Ihre Frage ein, um zu zeigen, was nicht für Sie gearbeitet hat. Wenn nicht, sollten Sie versuchen, es zuerst selbst zu lösen und dann den Code und die Forschung hier zu veröffentlichen. Es macht Ihre Frage einfacher für andere zu beantworten! – SuperBiasedMan

+0

Welches Format verwendet Ihre TXT-Datei? Ist es einfach ** [0-9] \ *, [0-9] \ *, [0-9] \ ***? – sjaustirni

+0

Ich habe mehrere Textdateien mit einer Spalte jeder und verpackt sie zusammen in der np.array mit average_list np.array = ([ np.genfromtxt ("1.txt"), np.genfromtxt ("2.txt") ]) – Tolotos

Antwort

4

einfache und einfache Lösung zu lesen ist ein map ov laufen er die äußere Liste und eine for-Schleife über die Indizes der inneren Schleife laufen in jedem Raum von 50

Hier ist eine Demo:

length = 3 
a = np.array([range(1,10), range(1,10)]) 
map(lambda y: [np.mean(y[i:i+length]) for i in range(0, len(y), length)], a) 

Der obige Code führt den Durchschnitt alle drei Elemente Sie könnten xrange auch verwenden, wenn python2

0

verwenden, können Sie erste reshape das Array so daß jede Reihe eine der Gruppen von 50 Elementen ist, und dann np.mean auf jede dieser Reihen gelten, dann wieder neu zu gestalten.

>>> a = np.array([range(1000), range(1000), range(1000)]) 
>>> b = np.reshape(a, (60, 50)) 
>>> c = np.apply_along_axis(np.mean, 1, b) 
>>> np.reshape(c, (3, 20)) 
array([[ 24.5, 74.5, 124.5, 174.5, 224.5, 274.5, 324.5, 374.5, 
     424.5, 474.5, 524.5, 574.5, 624.5, 674.5, 724.5, 774.5, 
     824.5, 874.5, 924.5, 974.5], 
     [ 24.5, 74.5, 124.5, 174.5, 224.5, 274.5, 324.5, 374.5, 
     424.5, 474.5, 524.5, 574.5, 624.5, 674.5, 724.5, 774.5, 
     824.5, 874.5, 924.5, 974.5], 
     [ 24.5, 74.5, 124.5, 174.5, 224.5, 274.5, 324.5, 374.5, 
     424.5, 474.5, 524.5, 574.5, 624.5, 674.5, 724.5, 774.5, 
     824.5, 874.5, 924.5, 974.5]])