gpt4 book ai didi

python - 如何获得列表中每十分之一的平均值?

转载 作者:行者123 更新时间:2023-12-01 01:45:43 27 4
gpt4 key购买 nike

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

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

最佳答案

您所描述的实际上只是一句台词:

np.mean(np.array_split(array, 10), axis=0)

array_split 适用于任何“类似数组”,其中包括列表,因此“将列表转换为 numpy 数组”是自动的。

np.mean 也适用于任何“类似数组”,其中包括由 array_split 返回的数组列表,被视为二维数组,因此“...每一个”也是自动的。

所以这确实是全部内容。

<小时/>

请注意,虽然“类似数组”在 NumPy 文档中随处可见,但据我所知,它从未在任何地方进行过严格定义。但它的基本含义是:如果您可以调用 np.array(x) 并返回您天真的希望的数组,那么 x 就是类似数组的。 This question有一个答案深入 NumPy 源代码,以准确显示如何处理类似数组的值。

另请注意,某些 NumPy 函数实际上并未说明它们期望的类型。例如,mean明确表示它需要一个 array_like 来表示 a,但是 array_split没有说明它需要什么(如果你试图通过 split 的链接来猜测,你就会猜错)。因此,有时,找出类似数组是否可以接受的唯一方法就是测试它。但这只是一个简单的测试,所以没什么大不了的。

<小时/>

当然,如果你不想使用NumPy,则不必;直接在列表上进行操作并没有那么困难;你只需要显式循环:

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 相同的操作,所以你可以这样做:

means = [statistics.mean(chunk) for chunk in my_array_split(array, 10)]

…这看起来与 NumPy 单行代码没有什么不同,它只是使循环变得明确。

关于python - 如何获得列表中每十分之一的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51368085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com