【发布时间】:2019-09-22 16:30:49
【问题描述】:
在 numpy 中,用于计算 standard deviaiton 的函数需要一个值列表,如 [1, 2, 1, 1] 并计算这些值的标准差。就我而言,我有一个嵌套的值和计数列表,例如 [[1, 2], [3, 1]],其中第一个列表包含值,第二个列表包含相应值出现频率的计数。
我正在寻找一种 clean 方法来计算上述给定列表的标准偏差,干净的含义
- numpy、scipy、pandas 等中已经存在的函数。
- 解决问题的更 Pythonic 方法
- 更简洁、可读性更好的解决方案
我已经有了一个可行的解决方案,它将嵌套的计数值列表转换为一个扁平的值列表,并使用上面的函数计算标准偏差,但我发现它不是那么令人愉快,宁愿有另一个选择。
我的解决方法的一个最小工作示例是
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
感谢您的任何想法或建议:)
【问题讨论】:
-
“我正在寻找一种计算标准差的简洁方法”您的工作解决方案看起来足够简洁。当然,您可以通过使用列表推导、lambdas 和诸如此类的东西使其更简洁,但除非您可以通过“干净的方式”来定义您的意思,否则您的解决方案与您的问题一样好。
-
感谢您的反馈!我添加了一个希望更详细的解释我所说的“干净”
标签: python numpy scipy statistics