Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将列表拆分为现有列表,然后在python中对其进行平均?_Python_List_Numpy_Sublist - Fatal编程技术网

如何将列表拆分为现有列表,然后在python中对其进行平均?

如何将列表拆分为现有列表,然后在python中对其进行平均?,python,list,numpy,sublist,Python,List,Numpy,Sublist,我编写了下面的代码,它获取10个样本,然后将其拆分为两个列表,然后对其进行平均,即在输出中有5个数据样本 av = 2 data = np.random.randn(10); print(data) tic = time.time(); def average(av_n, data): if av_n > 1: data = data[:len(data) - len(data) % av_n]; llen = len(data) a

我编写了下面的代码,它获取10个样本,然后将其拆分为两个列表,然后对其进行平均,即在输出中有5个数据样本

av = 2
data = np.random.randn(10);
print(data)
tic = time.time();
def average(av_n, data):
    if av_n > 1:
        data = data[:len(data) - len(data) % av_n];
        llen = len(data)
        avedDataLen = int(llen/av_n);
        chunks = [data[x:x+avedDataLen] for x in xrange(0, llen, avedDataLen)]
        print (chunks)
        def divide(x): return (x / av_n)
        return map(divide, map(sum, zip(*chunks)))
    else:
        return data

amp = np.asarray(average(av, data))
print(amp)
print ('takes time: ' +str(time.time() - tic))
例如,我的输入是:

[-0.22609503 -0.4501512  -0.46334891  1.18450149 -1.17728558  1.27805933
  0.25943615 -1.18671214  0.96818224  0.32928086]
应将其分成“av_n”个阵列。在这种情况下,它是两个:

[-0.22609503, -0.4501512 , -0.46334891,  1.18450149, -1.17728558]
[ 1.27805933,  0.25943615, -1.18671214,  0.96818224,  0.32928086]
结果是:

[ 0.52598215 -0.09535753 -0.82503053  1.07634186 -0.42400236]

唯一的问题是,我的应用程序在平均0.25秒的时间内花费了相当多的时间,有没有更快的方法

如果
数据
可以被均匀地划分到所需数量的子列表中,则可以
重塑
数组,然后使用
np.average
和适当的
参数

>>> data
array([-0.22609503, -0.4501512 , -0.46334891,  1.18450149, -1.17728558,
        1.27805933,  0.25943615, -1.18671214,  0.96818224,  0.32928086])
>>> np.average(data.reshape((2, -1)), axis=0)
array([ 0.52598215, -0.09535752, -0.82503053,  1.07634186, -0.42400236])
>>> np.average(data.reshape((2, -1)), axis=1)
array([-0.22647585,  0.32964929])
如果列表不可平均分割,可以修剪最后几个元素;您似乎在代码中也做了类似的事情。结果是一样的,而且速度要快得多

>>> data = np.random.randn(127874)                             
>>> %timeit np.asarray(list(average(2, data)))
10 loops, best of 3: 36.8 ms per loop
>>> %timeit np.average(data.reshape((2, len(data)//2)), axis=0)
10000 loops, best of 3: 115 µs per loop

(使用
list(average(…)
),这是因为Python 2和Python 3中
map
的行为不同;请注意,您的代码创建了大量临时列表,包括由
map
创建的列表)

并不完全清楚这应该做什么。
divide
应该做什么?你能展示一些示例数据(少于4万项)和预期结果吗?@tobias_k,谢谢你的评论,我已经更新了问题。哇,谢谢你,你以非常简单高效的方式完成了,非常感谢!不幸的是,我不能投票支持你的答案,我没有足够的声誉,我会在得到15分后投票。再次感谢你。