【发布时间】:2013-12-09 07:45:19
【问题描述】:
我有一个大数据集,它包含与真实网站中的照片对应的标签(500 000条记录,每条至少包含一个标签)
例子:
标签1
标签1 标签2 标签3
tag1 tag12 tag99
等等,500000次
我尝试根据数据集中每个标签的出现次数来计算标签的权重。对于 500 行,代码运行良好(0.1 秒),但对于整个数据,它需要几个小时(超过 8 个),即使对于 PyPy
我认为我做错了什么并且低效地使用 Python。这是计算权重的代码:
for i, photo in enumerate(data):
for j, tag in enumerate(photo):
if (tag not in tag_set):
tag_set.append(tag)
tag_w.append(log(len(data)) - log(sum(x.count(tag) for x in data)))
如何加快速度?
谢谢!
【问题讨论】:
-
你循环数据;到目前为止,您最大的 N 两次,这完全没有必要。我建议使用 defaultdict(0),然后将 defaultdict[tag] += 1 之类的东西放在你的内部循环中。
-
两次?那不是两次。这与标签的数量一样多。
-
一个小的改变也是将
tag_set从list更改为set。如果 tag_list 很大,这可能会给您带来一些速度上的提升。与其他人建议的那样,与替换循环相比,这不会太多:) -
等等,你到底用
enumerate干什么?你没有对索引做任何事情。 -
你是对的,它来自我过去的循环实现
标签: python performance