我有很多列表,比如
import numpy as np
np.array([range(1,1000), range(1,1000), range(1,1000)])
我想计算每列中50个值的平均值。我想得到类似的东西:
np.array([[np.mean(range(1,50)), np.mean(range(51,100)), ...], [[np.mean(range(1,50)), np.mean(range(51,100)), ...], ...])
但是我没有1-1000的值,而是有几个文本文件,每个文件只有一列,我把它们一起打包在np.array中
average_list = np.array([ np.genfromtxt("1.txt"), np.genfromtxt("2.txt") ])
我尝试循环部分列表并一起添加50个值,但它似乎没有做我想要的事情
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
答案 0 :(得分:4)
简单易读的解决方案是在外部列表上运行map
,并在每个50的空格处对内部循环的索引运行for循环。
这是一个演示:
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)
上面的代码取每3个元素的平均值 如果使用python2
,您也可以使用xrange
答案 1 :(得分:0)
您可以先reshape
数组,以便每行都是50个元素的组中的一个,然后将np.mean
应用于每个行,然后重新整形。
>>> 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]])