Vil*_*lx- 9 python optimization python-2.6 large-data
有一个名为svnmerge.py的脚本,我正在尝试调整和优化一下.我对Python完全不熟悉,所以这并不容易.
当前的问题似乎与RevisionSet脚本中调用的类有关.实质上它所做的是创建一个整数键布尔值的大散列表(?).在最坏的情况下 - 我们的SVN存储库中的每个版本都有一个,现在接近75,000.
之后,它对如此庞大的数组执行集合运算 - 加法,减法,交集等.实现是最简单的O(n)实现,当然,在这么大的集合上变得非常慢.整个数据结构可以优化,因为有很长的连续值.例如,1到74,000之间的所有键可能包含true.此脚本也是为Python 2.2编写的,这是一个非常古老的版本,我们仍然使用2.6,所以也可能有一些东西可以获得.
我可以尝试自己拼凑这些,但这很困难并且需要花费很多时间 - 更不用说它可能已经在某处实现了.虽然我喜欢学习经历,但结果现在更重要.你有什么建议我这样做?
您可以尝试使用numpy而不是普通的python.我发现这样的操作非常快.
例如:
# Create 1000000 numbers between 0 and 1000, takes 21ms
x = numpy.random.randint(0, 1000, 1000000)
# Get all items that are larger than 500, takes 2.58ms
y = x > 500
# Add 10 to those items, takes 26.1ms
x[y] += 10
Run Code Online (Sandbox Code Playgroud)
既然有更多的行,我认为75000不应该是一个问题:)