2015-07-22 25 views
5

tôi có một danh sách lớn của các danh sách, một cái gì đó giống nhưtrung bình qua bộ phận trong danh sách liệt kê

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

Và tôi muốn để tính toán mức trung bình của 50 giá trị mỗi trong mỗi cột. Tôi muốn để có được một cái gì đó như:

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

Nhưng thay vì giá trị 1-1000 tôi có một vài tập tin văn bản với một cột mỗi, và tôi đóng gói chúng lại với nhau trong np.array với

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

tôi đã cố gắng lặp qua các bộ phận của danh sách và thêm 50 giá trị với nhau, nhưng nó dường như không làm những gì tôi muốn nó

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

Bạn đã cố gắng giải quyết vấn đề này chưa? Nếu bạn có, hãy bao gồm mã của bạn và nghiên cứu trong câu hỏi của bạn để hiển thị những gì đã không làm việc cho bạn. Nếu không, bạn nên cố gắng tự giải quyết nó trước và sau đó đăng mã và nghiên cứu tại đây. Nó làm cho câu hỏi của bạn dễ dàng hơn cho những người khác để trả lời quá! – SuperBiasedMan

+0

Tệp txt của bạn sử dụng định dạng nào? Có đồng bằng ** [0-9] \ *, [0-9] \ *, [0-9] \ *** không? – sjaustirni

+0

tôi có một vài tệp văn bản với một cột và đóng gói chúng lại với nhau trong np.array với average_list = np.array ([ np.genfromtxt ("1.txt"), np.genfromtxt ("2.txt") ]) – Tolotos

Trả lời

4

đơn giản và dễ dàng để đọc giải pháp là để chạy một ov map er danh sách bên ngoài và chạy một vòng lặp for qua các chỉ số của các vòng trong ở mọi không gian 50.

Dưới đây là một bản 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) 

Đoạn mã trên có tỷ lệ trung bình của tất cả 3 yếu tố Bạn có thể cũng sử dụng xrange nếu sử dụng python2

0

Trước tiên, bạn có thể reshape mảng sao cho mỗi hàng là một trong các nhóm gồm 50 phần tử, sau đó áp dụng np.mean cho mỗi hàng đó, sau đó định lại hình.

>>> 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]]) 
Các vấn đề liên quan