0

我想从一个特定大小的列表(或数组)中取出一口,返回该口的平均值,然后继续下一个口并重新开始。有没有办法在不编写 for 循环的情况下做到这一点?

In [1]: import numpy as np
In [2]: x = range(10)
In [3]: np.average(x[:4])
Out[3]: 1.5
In [4]: np.average(x[4:8])
Out[4]: 5.5
In [5]: np.average(x[8:])
Out[5]: 8.5

我正在寻找类似 np.average(x[:bitesize=4]) 的东西来返回:[1.5,5.5,8.5]。

我看过切片数组和遍历数组,但我还没有找到任何可以做我想做的事情的事情。

4

3 回答 3

5
[np.average(x[i:i+4]) for i in xrange(0, len(x), 4) ]
于 2010-01-13T02:43:04.257 回答
1

grouper itertools食谱可以提供帮助。

于 2010-01-13T02:41:49.350 回答
1

使用 numpy,您可以使用np.average关键字axis

import numpy as np
x=np.arange(12)
y=x.reshape(3,4)
print(y)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
print(np.average(y,axis=1))
# [ 1.5  5.5  9.5]

请注意,要 reshape x,我必须x从可以被组大小整除的长度开始(在本例中为 4)。

如果 的长度x不能被组大小整除,则可以创建一个掩码数组并用于np.ma.average计算适当的平均值。

例如,

x=np.ma.arange(12)
y=x.reshape(3,4)
mask=(x>=10)
y.mask=mask
print(y)
# [[0 1 2 3]
#  [4 5 6 7]
#  [8 9 -- --]]
print(np.ma.average(y,axis=1))
# [1.5 5.5 8.5]
于 2010-01-13T03:21:18.190 回答