【发布时间】:2021-09-23 10:03:12
【问题描述】:
快速解决方案
如果您只想将一个 numpy 数组或 python 列表拆分为固定长度的数组或列表,请执行以下操作:
l = 10 # the fixed length of output array
output = [input[l*i:l*(i+1)-1] for i in range(0, len(input) // l)]
如果输入不是可被l 整除的整数,但您想在输出中包含最终(较短的)数组,请执行以下操作:
l = 10 # the fixed length of output array
output = [input[l*i:l*(i+1)-1] for i in range(0, (len(input) + l - 1) // l)]
完整问题
我正在尝试计算一些数据的一些统计数据。示例统计数据包括平均值、标准差、最小值和最大值。
数据被格式化为 python numpy 数组。这是一个简单的例子:
data_in = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data_array = numpy.array(data_in)
此处示例的数组长度为 10,但在实践中,考虑输入数据的长度为 100 万个元素(但不是精确的整数),并且输出应该对大约 10k 个元素的块进行统计。
这是我尝试过的方法。下面的示例仅显示平均统计量。
mean_out = [numpy.mean(data_array[2*i:2*i+1]) for i in range(0, len(data_array) // 2)]
这似乎不是一个特别优雅的解决方案。这里的“块长度”是2,在上面的表达式中出现在3个地方。
这可以使用bl作为块长度以更通用的方式编写。
mean_out = [numpy.mean(data_array[bl*i:bl*(i+1)-1]) for i in range(0, len(data_array) // bl)]
除此之外,当输入数据长度不能被块长度整除时,上述方法不起作用。例如,将块长度更改为 3 会导致输出长度为 3。
由于3 * 3 = 9,计算中缺少最后一个元素。
这可以通过使用以下表达式“修复”:
mean_out = [numpy.mean(data_array[bl*i:bl*(i+1)-1]) for i in range(0, (len(data_array) + bl - 1) // bl)]
但同样,这并不是特别优雅。
是否有内置的 python 或 numpy 函数通过将输入数组拆分为固定长度的块来计算这些统计信息?或者有没有更好的方法来做这个我不知道的计算?
【问题讨论】:
标签: python numpy statistics data-processing