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用于数组/数值运算吗?
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |