你所描述的实际上是一个单行:
np.mean(np.array_split(array, 10), axis=0)
array_split 适用于任何“类数组”,包括列表,因此“将列表转换为 numpy 数组”是自动的。
np.mean 也适用于任何“类数组”,包括array_split 返回的数组列表,被视为二维数组,因此“… of each one”也是自动的。
所以这就是它的全部。
请注意,虽然 NumPy 文档中到处都使用“类数组”,但据我所知,它从未在任何地方严格定义过。但它的基本意思是:如果你可以调用np.array(x) 并取回你天真希望的数组,那么x 是类似数组的。 This question 有一个深入研究 NumPy 源代码的答案,以准确展示如何处理类似数组的值。
还要注意,一些 NumPy 函数实际上并没有说明它们期望的类型。例如,mean 明确表示a 需要一个array_like,但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 单行代码没有什么不同,它只是使循环更加明确。