在 python defaultdict 上进行更快计算的优化
optimization for faster calculation on python defaultdict
我有这样一个脚本;
for b in range(len(xy_alignments.keys())):
print str(b) + " : " + str(len(xy_alignments.keys()))
x = xy_alignments.keys()[b][0]
y = xy_alignments.keys()[b][1]
yx_prob = yx_alignments[(y,x)] / x_phrases[x]
xy_prob = xy_alignments[(x,y)] / y_phrases[y]
line_str = x + "\t" + y + "\t" + str(yx_prob) + "\t" + str(xy_prob) + "\n"
of.write(line_str.encode("utf-8"))
of.close()
xy_alignments
、yx_alignments
、x_phrases
和 y_phrases
是
python defaultdict 涉及数百万键的变量。
当我 运行 上面的循环时,它 运行 太慢了。
有没有python爱好者们有什么快速的建议?
谢谢,
这里有一个更惯用的版本,应该也更快。
for (x, y), xy_alignment in xy_alignments.iteritems():
yx_prob = yx_alignments[(y, x)] / x_phrases[x]
xy_prob = xy_alignment / y_phrases[y]
of.write(b'%s\t%s\t%s\t%s\n' % (x, y, yx_prob, xy_prob))
这个
- 节省每次创建新列表的
key()
调用,
- 使用
iteritems()
, 保存一次字典查询
- 使用字符串格式保存字符串分配,并且
- 保存
encode()
调用,因为无论如何所有输出都在 ascii 范围内。
我有这样一个脚本;
for b in range(len(xy_alignments.keys())):
print str(b) + " : " + str(len(xy_alignments.keys()))
x = xy_alignments.keys()[b][0]
y = xy_alignments.keys()[b][1]
yx_prob = yx_alignments[(y,x)] / x_phrases[x]
xy_prob = xy_alignments[(x,y)] / y_phrases[y]
line_str = x + "\t" + y + "\t" + str(yx_prob) + "\t" + str(xy_prob) + "\n"
of.write(line_str.encode("utf-8"))
of.close()
xy_alignments
、yx_alignments
、x_phrases
和 y_phrases
是
python defaultdict 涉及数百万键的变量。
当我 运行 上面的循环时,它 运行 太慢了。
有没有python爱好者们有什么快速的建议?
谢谢,
这里有一个更惯用的版本,应该也更快。
for (x, y), xy_alignment in xy_alignments.iteritems():
yx_prob = yx_alignments[(y, x)] / x_phrases[x]
xy_prob = xy_alignment / y_phrases[y]
of.write(b'%s\t%s\t%s\t%s\n' % (x, y, yx_prob, xy_prob))
这个
- 节省每次创建新列表的
key()
调用, - 使用
iteritems()
, 保存一次字典查询
- 使用字符串格式保存字符串分配,并且
- 保存
encode()
调用,因为无论如何所有输出都在 ascii 范围内。