【发布时间】:2015-02-08 00:23:09
【问题描述】:
我正在对图像进行一些分析,并且我有一个生成器可以为我提供图像中的所有像素:
def pixels_g(img):
w, h = img.shape
for y in range(0, h):
for x in range(0, w):
yield img[y][x]
如果转换为列表,它的输出将类似于
[0, 1, 2, 5, 240, 5, ... ]
现在我想为它获取“频率表”:
{
0: 0,
1: 5,
2: 10,
3: 0,
4: 0,
#snip
255: 7
}
我在this question 中找到了一些有用的选项,但它们都适用于列表,而且我认为从我的生成器创建列表并不是一个好主意 - 它可以有数百万个元素。
因此,我正在寻找一种方法来做到这一点,同时保留生成器的好处。我会处理很多图像,不想占用太多资源。
【问题讨论】:
-
一个默认的字典,随手计算?
-
collections.counter 再次出击。这个问题肯定至少有十几个重复项。
-
@OlehPrypin 会将 collections.Counter 用作生成器吗?
-
唯一的区别可能是它不保存零计数元素...
标签: python python-3.x generator