如何优化Python中大型(75,000项)布尔集的操作?

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,所以也可能有一些东西可以获得.

我可以尝试自己拼凑这些,但这很困难并且需要花费很多时间 - 更不用说它可能已经在某处实现了.虽然我喜欢学习经历,但结果现在更重要.你有什么建议我这样做?

Wol*_*lph 7

您可以尝试使用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不应该是一个问题:)