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

时间:2016-12-06 04:41:07

标签: 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)

设置交叉点

# 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

设置差异

# 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

设置联合

# 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

当然这是没有代表性的,因为ab包含随机整数......但我已经多次测试了这个,也有范围。 NumPy总是比Python的内置集合对象慢1.5到6倍。

此外,我猜NumPy的阵列在经常添加或删除元素时并不是很好。

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

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

0 个答案:

没有答案