列表中每个子列表的平均数

5

我有一个大的列表嵌套列表,类似于

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

1
你尝试过解决这个问题吗?如果是的话,请在你的问题中包含你的代码和研究,以展示哪些方法对你没有起作用。如果没有尝试过,请先自己尝试解决它,然后再在这里发布代码和研究。这也会让其他人更容易回答你的问题! - SuperBiasedMan
你的txt文件使用什么格式?是纯文本 [0-9]*,[0-9]*,[0-9]* 吗? - sjaustirni
我有几个每列只有一个的文本文件,并将它们打包到np.array中,使用以下代码:average_list = np.array([ np.genfromtxt("1.txt"), np.genfromtxt("2.txt") ]) - Tolotos
@SuperBiasedMan 是的,我尝试了几种方法,比如循环遍历列表的部分并将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 - Tolotos
@Tolotos 不论你的技能水平如何,发布代码都是很重要的,因为它展示了你尝试过什么,使你的意图更清晰,并允许人们看到你理解和不理解代码的哪些部分。每个人都曾经是初学者,所以不要太担心。 :) - SuperBiasedMan
@Tolotos,我编辑了你的帖子并加入了代码,但如果我犯了错误,请编辑帖子进行更正,因为我可能误解了你的代码(特别是缩进)! - SuperBiasedMan
2个回答

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接