首页 > 解决方案 > 如何计算计数值对的标准差

问题描述

在 numpy 中,用于计算标准偏差的函数需要一个值列表,如 [1, 2, 1, 1] 并计算这些值的标准偏差。就我而言,我有一个嵌套的值和计数列表,例如 [[1, 2], [3, 1]],其中第一个列表包含值,第二个列表包含相应值出现频率的计数。

我正在寻找一种干净的方法来计算上面给定列表的标准偏差,干净的意思

我已经有了一个可行的解决方案,它将嵌套的计数值列表转换为一个扁平的值列表,并使用上面的函数计算标准偏差,但我发现它不是那么令人愉快,宁愿有另一个选择。

我的解决方法的一个最小工作示例是

import numpy as np

# The usual way
values = [1,2,1,1]
deviation = np.std(values)
print(deviation)

# My workaround for the problem
value_counts = [[1, 2], [3, 1]]
values, counts = value_counts
flattened = []
for value, count in zip(values, counts):
    # append the current value count times
    flattened = flattened + [value]*count
deviation = np.std(flattened)
print(deviation)

输出是

0.4330127018922193
0.4330127018922193

感谢您的任何想法或建议:)

标签: pythonnumpyscipystatistics

解决方案


您只是在寻找 numpy.repeat。

numpy.std(numpy.repeat(value_counts[0], value_counts[1]))

推荐阅读