计算计数器中值的均值和方差的 Pythonic 方法
Pythonic way to calculate the mean and variance of values in Counters
我想知道是否有一种 Python 式的方法来计算计数器的均值和方差?
例如,我有四个共享相同密钥的计数器:
a = Counter({1: 23, 2: 39, 3: 1})
b = Counter({1: 28, 2: 39, 3: 1})
c = Counter({1: 23, 2: 39, 3: 2})
d = Counter({1: 23, 2: 22, 3: 1})
我的方法是:
each_key_val = {}
for i in a.keys(): # The assumption here is that all Counters must share the same keys
for j in [a, b, c, d]:
try:
each_key_val[i].append(j[i])
except:
each_key_val[i] = [j[i]]
我可以使用以下代码找到每个键的均值/方差:
np.mean(each_key_val[i])
np.var(each_key_val[i])
与我的方法相比,是否有更简单的方法来计算每个键的均值/方差?
并不是说我认为以下内容比您所拥有的更具可读性,而是它仅使用列表理解。
假设你有
cs = (a, b, c, d)
然后可以用
找到平均值的字典
m = {k: float(d) / len(cs) for k, d in sum(cs).iteritems()}
对于方差,注意,通过definition of variance V[X] = E[x2] - (E[X] )2,所以,如果你定义:
p = sum([Counter({k: ((float(d**2) / len(cs))) for (k, d) in cn.iteritems()}) \
for cn in cs])
则方差字典为
{k: p[k] - m[k]**2 for k in m}
我想知道是否有一种 Python 式的方法来计算计数器的均值和方差?
例如,我有四个共享相同密钥的计数器:
a = Counter({1: 23, 2: 39, 3: 1})
b = Counter({1: 28, 2: 39, 3: 1})
c = Counter({1: 23, 2: 39, 3: 2})
d = Counter({1: 23, 2: 22, 3: 1})
我的方法是:
each_key_val = {}
for i in a.keys(): # The assumption here is that all Counters must share the same keys
for j in [a, b, c, d]:
try:
each_key_val[i].append(j[i])
except:
each_key_val[i] = [j[i]]
我可以使用以下代码找到每个键的均值/方差:
np.mean(each_key_val[i])
np.var(each_key_val[i])
与我的方法相比,是否有更简单的方法来计算每个键的均值/方差?
并不是说我认为以下内容比您所拥有的更具可读性,而是它仅使用列表理解。
假设你有
cs = (a, b, c, d)
然后可以用
找到平均值的字典m = {k: float(d) / len(cs) for k, d in sum(cs).iteritems()}
对于方差,注意,通过definition of variance V[X] = E[x2] - (E[X] )2,所以,如果你定义:
p = sum([Counter({k: ((float(d**2) / len(cs))) for (k, d) in cn.iteritems()}) \
for cn in cs])
则方差字典为
{k: p[k] - m[k]**2 for k in m}