您如何获得列表的十分之一的平均值?

时间:2018-07-16 18:30:32

标签: python numpy

我确定有一个numpy函数,我只是还没有找到它。假设您有一个任意大小的整数列表。如何将其转换为十个浮点数的列表,其中每个浮点数是原始列表的十分之一的平均值?

编辑:我能想到的最好的方法是,首先将列表转换为numpy数组,然后使用.array_split(array, 10)将其拆分为相等的部分,然后取每个平均值。但是我想一定有一种更简单的方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

您所描述的实际上是单线的:

Image.memory

np.mean(np.array_split(array, 10), axis=0) 适用于任何包含列表的“类似于数组的数组”,因此自动将“将列表转换为numpy数组”。

array_split也可用于任何“类似数组的”数组,其中包括np.mean返回的数组列表,将其视为2D数组,因此“每个……”也是自动的。

这真的就是全部。


请注意,尽管据我所知,在整个NumPy文档中都使用了“类似数组”,但从未在任何地方对其进行严格定义。但这基本上意味着:如果您可以调用array_split并返回您天真希望得到的数组,那么np.array(x)就像数组。 This question有一个答案可以深入研究NumPy源,以准确显示如何处理类似数组的值。

还要注意,某些NumPy函数实际上并未说出它们期望的类型。例如,mean明确表示x需要一个array_like,但是array_split却没有说明需要做什么(如果您尝试通过链接到以下链接来猜测) a,您会猜错)。因此,有时,找出类似数组的唯一方法是对其进行测试。但这是一个微不足道的测试,所以没什么大不了的。


当然,如果您不想使用NumPy,则不必这样做;直接在列表上执行 并不难;您只需要显式循环即可:

split

当然,如果您愿意的话,也可以将所有内容折叠成一个可怕的单行格式,或者更好的是,将前两行包装在一个功能与chunksize = len(array) // 10 chunks = (array[i*chunksize:(i+1)*chunksize] for i in range(10)) means = [statistics.mean(chunk) for chunk in chunks] 相同的函数中,这样您就可以然后做:

array_split

…看起来与NumPy一线式没有什么不同,它只是使循环清晰可见。

相关问题