是否有类似NumPy的库进行集计算?

dan*_*451 8 python performance numpy set

对于快速数值计算,我经常使用NumPy.尽管NumPy是一个很好的工具,但它(显然)不是设置操作的好选择,因为NumPy适用于数组.甚至Python的内置集合对象比使用NumPy进行集合操作要快得多:


制备:

# NumPy arrays
a = np.unique(np.random.randint(0, high=1000, size=1000))
b = np.unique(np.random.randint(0, high=1000, size=1000))

# Python's built-in set objects
sa = set(a)
sb = set(b)
Run Code Online (Sandbox Code Playgroud)

设置交集:

# NumPy
timeit.timeit("np.intersect1d(a, b)", setup="from __main__ import a, b, np", number=10000)
> 1.3161415259819478

# Python
timeit.timeit("sa.intersection(sb)", setup="from __main__ import sa, sb", number=10000)
> 0.2791759959945921
Run Code Online (Sandbox Code Playgroud)

设定差异:

# NumPy
timeit.timeit("np.setdiff1d(a, b)", setup="from __main__ import a, b, np", number=10000)
> 0.6135410660062917

# Python
timeit.timeit("sa - sb", setup="from __main__ import sa, sb", number=10000)
> 0.21169587498297915
Run Code Online (Sandbox Code Playgroud)

设置联盟:

# NumPy
timeit.timeit("np.union1d(a, b)", setup="from __main__ import a, b, np", number=10000)
> 0.4114252869854681

# Python
timeit.timeit("sa.union(sb)", setup="from __main__ import sa, sb", number=10000)
> 0.2402713909978047
Run Code Online (Sandbox Code Playgroud)

当然这是相当不具代表性的,因为a并且b包含随机整数......但我已经多次测试过,也有范围.NumPy总是比Python的内置集合对象慢1.5到6倍.

而且,我猜NumPy的数组并不常见,因为必须经常添加或删除元素.


问题:我目前正在使用通常包含10,000个以上元素的集合,有时甚至包含数百万个元素.另外,我经常添加或删除元素.

问题:在Python中是否有某种库可用于快速设置操作?有些库提供API来预编译集合操作的东西,比如NumPy用于数组/数值运算吗?