【问题标题】:How to calculate standard deviation of count-value pairs如何计算计数值对的标准差
【发布时间】: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


【解决方案1】:

您只是在寻找 numpy.repeat。

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

【讨论】:

  • 这确实有效,但如果您的计数很高,可能会导致内存效率低下。要利用数据的稀疏性,您可能需要使用提供的答案here
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 2021-06-15
  • 2014-03-21
  • 2016-04-14
  • 2019-09-01
  • 2021-06-14
相关资源
最近更新 更多