use*_*183 45 python numpy average
我有一个numpy数组.我想创建一个新的数组,它是每个连续三元素的平均值.因此,新阵列将是原始阵列的三分之一.
举个例子:
 np.array([1,2,3,1,2,3,1,2,3])
应该返回数组:
 np.array([2,2,2])
有人能建议一种有效的方法吗?我画的是空白.
Jai*_*ime 75
如果您的数组arr的长度可被3整除:
np.mean(arr.reshape(-1, 3), axis=1)
重塑为更高维度的阵列,然后在其中一个附加维度上执行某种形式的缩小操作是numpy编程的主要内容.
让Google寻找一个简单概括为具有多个尺寸的阵列:该函数block_reduce中scikit-image模块(链接到文档)。
它有一个非常简单的接口,可以通过应用诸如 之类的函数来对数组进行下采样numpy.mean,但也可以使用其他函数(最大值、中值等)。通过为块提供具有不同大小的元组,可以通过不同轴的不同因素来完成下采样。这是一个二维数组的例子;使用平均值仅对轴 1 进行 5 下采样:
import numpy as np
from skimage.measure import block_reduce
arr = np.stack((np.arange(1,20), np.arange(20,39)))
# array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
#        [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]])
arr_reduced = block_reduce(arr, block_size=(1,5), func=np.mean, cval=np.mean(arr))
# array([[ 3. ,  8. , 13. , 17.8],
#        [22. , 27. , 32. , 33. ]])
正如在另一个答案的评论中所讨论的那样:如果减少维度中的数组不能被块大小整除,则填充值由参数提供cval(默认为 0)。