【发布时间】:2015-08-02 12:04:33
【问题描述】:
Counter 对象是否有任何等效于 numpy ufunc 的方法?
例如,要将 N 加到计数器中的所有值中,我必须这样做:
>>> from collections import Counter
>>> x = Counter(['foo', 'foo', 'bar', 'bar'])
>>> n = 2
>>> y = Counter({k:v+n for k,v in x.items()})
>>> x
Counter({'foo': 2, 'bar': 2})
>>> y
Counter({'foo': 4, 'bar': 4})
给定 1 万亿个密钥,肯定会比使用numpy 花费更长的时间:
>>> import numpy as np
>>> x = Counter(['foo', 'foo', 'bar', 'bar'])
>>> k, v = zip(*x.items())
>>> n = 2
>>> _v = np.array(v) + n
>>> y = Counter(dict(zip(k, list(_v))))
>>> y
Counter({'foo': 4, 'bar': 4})
还有其他方法可以为 Counter 中的所有值实现相同的 +N 吗?
【问题讨论】:
-
使用一个简单的循环并更新同一个 Counter dict 中的值,创建另一个
Counter或简单的dict将导致另一个具有 1 万亿键的中间字典。
标签: python numpy dictionary counter