假设我有一堆字典
a = {'x': 1.0, 'y': 0.5, 'z': 0.25 }
b = {'w': 0.5, 'x': 0.2 }
只有两个,但问题是关于一个自由裁量。在
找到每个键的平均值最快的方法是什么?dict是非常稀疏的,因此在很多情况下,许多键在不同的dict中都不存在。在
我要找的结果是一个新字典,里面有所有的键和每个键的平均值。这些值总是浮动的,我很乐意使用ctypes。我的方法比我想要的慢,可能是因为在我的例子中,我使用的是defaultdicts,这意味着我实际上正在初始化值,即使它们不存在。如果这是导致速度慢的原因,我很乐意重构,只想确保我没有遗漏任何明显的东西。在
编辑:我想我对结果应该是什么产生了误导,如果这个值没有出现,它应该是0.0,所以上面例子的结果是:
^{pr2}$所以除法是按唯一键的总数。在
我想知道的主要问题是,有没有一种巧妙的方法可以在一步中将整个dict除以长度,或者在一步中完成加法。基本上是一个非常快速的向量加法和除法。我已经简单地看了numpy数组,但是它们似乎不适用于dict,如果我将dict转换为list,我就必须删除sparness属性(通过显式地将exavest值设置为0)。在
说明:
所有哈希中的键集,没有重复。在
上面集合中每个键的平均值,如果特定哈希中不存在该值,则使用0。在
这是有效的:
我不知道它是否比你的快,因为你还没有发布你的代码。在
^{pr2}$我尝试在tally中避免再次存储所有的值,只是简单地累积最后计算平均值所需的总和和计数。Python程序中的时间瓶颈通常在内存分配器中,使用较少的内存可以大大提高速度。在
通过分析可以证明这不是最快的,但是。。。在
我在猜测,允许Python使用内置的}将比计算新值时的平均值获得一些性能,但我肯定是错的。在
sum()
和{相关问题 更多 >
编程相关推荐