Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算计数器中值的均值和方差的Pythonic方法_Python_Performance_Counter - Fatal编程技术网

计算计数器中值的均值和方差的Pythonic方法

计算计数器中值的均值和方差的Pythonic方法,python,performance,counter,Python,Performance,Counter,我想知道是否有一种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 he

我想知道是否有一种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()}
对于方差,请注意,通过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的哪个版本?@Padraic Cunningham
2.7
但是我愿意接受任何建议,不管python的版本是什么:)您可以使用更简单的defaultdict创建dict,您想如何处理均值和方差?不用担心,FWIW使用>=python3.4还可以使用statistics.mean和statistics.variance。您还可以对d.items()中的k,v使用
您还可以使用一个漂亮的一行代码将其映射到所有计数器上:
映射(lamdba v:np.mean(v.values()),[a,b,c,d])
或同时将这两个操作作为元组列表:
映射(lambda v:(np.mean(v.values()),np.var(v.values()),[a,b])
那么,仅使用列表理解是否会加快计算速度?列表理解通常比循环快一点;YMMV,我怀疑它在这里会有多大变化。我认为这一点是不同的(请参阅)-一些更具python风格的人认为,对有副作用的东西使用循环,并尽可能使用列表理解来构建数据结构。有些人认为这种区分可以清除代码。这不仅是一个个案问题,还有个人品味的空间。