2015-07-22 11 views
5

mam duży wykaz list, cośŚrednia nad częściami w liście list

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

I chciałbym obliczyć średnią z 50 wartości każdego w każdej kolumnie. Chciałbym uzyskać coś takiego:

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

Ale zamiast wartości od 1-1000 Mam kilka plików tekstowych z jednej kolumnie każdego i spakowałem je razem w np.array z

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

próbowałem zapętlenie nad częściami listy i dodanie 50 wartości razem, ale nie wydaje się, aby robić to, co chcę go do

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

Czy próbowałeś rozwiązać ten problem? Jeśli tak, umieść swój kod i badania w swoim pytaniu, aby pokazać, co Ci się nie udało. Jeśli nie, powinieneś najpierw spróbować rozwiązać go samodzielnie, a następnie opublikować tutaj kod i badania. Ułatwia to odpowiedź na inne pytania! – SuperBiasedMan

+0

Jakiego formatu używa twój plik TXT? Czy to proste ** [0-9] \ *, [0-9] \ *, [0-9] \ ***? – sjaustirni

+0

Mam kilka plików tekstowych z jedną kolumną i zapakowałem je razem w np.array z average_list = np.array ([ np.genfromtxt ("1.txt"), np.genfromtxt ("2.txt") ]) – Tolotos

Odpowiedz

4

prosty i łatwy do odczytania rozwiązaniem jest uruchomienie map OV er zewnętrzna lista i uruchomić dla pętli nad indeksów pętli wewnętrznej w każdej przestrzeni 50.

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

Powyższy kod wykonuje się średnio co 3 elementów Mogłabyś również użyć xrange przypadku korzystania python2

0

można również najpierw reshape macierzy tak, że każdy rząd jest jedną z grup 50 elementów, a następnie stosuje się np.mean na każdy z tych rzędów, a następnie przekształcenia ponownie.

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