快速而轻量级的无符号32位整数集。

pyroaring的Python项目详细描述


Build StatusAppveyor BuildDocumentation Status

32位整数的一种高效、轻量级有序集合。 这是c库CRoaring的python包装器。

示例

您可以使用位图,几乎与代码中的经典python集相同:

frompyroaringimportBitMapbm1=BitMap()bm1.add(3)bm1.add(18)bm2=BitMap([3,27,42])print("bm1       = %s"%bm1)print("bm2       = %s"%bm2)print("bm1 & bm2 = %s"%(bm1&bm2))print("bm1 | bm2 = %s"%(bm1|bm2))

输出:

bm1       = BitMap([3, 18])
bm2       = BitMap([3, 27, 42])
bm1 & bm2 = BitMap([3])
bm1 | bm2 = BitMap([3, 18, 27, 42])

从PYPI安装

注意:这个安装方法需要一个最近的c编译器,比如gcc。

支持的系统:

  • Linux和MacOS:Python2.7或Python3.4或更高版本。
  • Windows:Python3.4或更高版本。

要在本地帐户上安装pyraring,请使用以下命令:

pip install pyroaring --user

对于系统范围的安装,请使用以下命令:

pip install pyroaring
当然,后者可能需要超级用户权限(考虑前缀)。 命令由sudo

如果要使用Python3,并且系统默认使用Python2.7,则 可能需要调整以上命令,例如将pip替换为pip3

从车轮安装

Github上为每个版本发布了几个轮子: https://github.com/Ezibenroc/PyRoaringBitMap/releases

从控制盘安装应该是最简单的,因为不需要C编译器。但是,性能可能更低。请注意 你必须选择正确的方向盘,这取决于你的系统。

例如,要在linux上为python安装pyroaringversion0.2.1forpython3.6

pip install --user https://github.com/Ezibenroc/PyRoaringBitMap/releases/download/0.2.1/pyroaring-0.2.1-cp36-cp36m-linux_x86_64.whl

手动编译/安装

例如,如果你想自己编译(安装)pyoraring 若要修改cython源或因为您没有pip,请执行以下操作 这些步骤。

注意,python包Cython是必需的。您可以安装为:

pip install --upgrade setuptools -user
pip install cython --user

克隆此存储库。

git clone https://github.com/Ezibenroc/PyRoaringBitMap.git
cd PyRoaringBitMap
git submodule init && git submodule update

在本地构建pyroaring,例如测试您创建的新功能。

python setup.py build_ext -i

在MacOS上,由于setuptools将-arch x86_64 -arch i386添加到编译器命令中,这可能会与-march=native标志冲突,因此可能会失败并出现错误。可以通过设置archflags标志覆盖此行为:

ARCHFLAGS="" python setup.py build_ext -i

然后您可以测试新代码:

pip install hypothesis --user
python test.py # run the tests, optional but recommended

安装pyroaring(如果没有pip,请使用此选项)。

python setup.py install # may require superuser rights, add option --user if you wish to install it on your local account

包装烤焦。

python setup.py sdist
pip install dist/pyroaring-0.1.?.tar.gz # optionnal, to install the package

造一个轮子。

python setup.py bdist_wheel

对于以上所有命令,可以使用两个环境变量来控制编译。

  • DEBUG=1以调试模式生成pyroaring。
  • ARCHI=<cpu-type>为给定平台构建pyroaring。平台可以是任何关键字 给gcc的-march选项(参见 documentation)。 请注意,不支持从64位体系结构交叉编译32位体系结构。

使用示例:

DEBUG=1ARCHI=x86-64 python setup.py build_ext

基准

Pyroaring与内置的set和其他实现进行比较:

  • 一种叫python-croaring
  • 一个叫roaringbitmap
  • 一个名为sortedcontainers
  • ordered sets的python实现

脚本quick_bench.py测量不同集合的时间 操作。它使用随机生成的大小为1e6和密度的集合 0.125。对于每个操作,30次测试的平均时间(秒) 是有报道的。

结果是通过:

  • CPU英特尔至强CPU E5-2630 v3
  • cpython 3.5.3版
  • GCC版本6.3.0
  • cython版本0.28.3
  • 纵火犯 dcf448a
  • python croaring提交 3aa61dd
  • RoaringBitmap提交 502d78d
  • SortedContainers提交 7d6a28c
operationpyroaringpython-croaringroaringbitmapsetsortedcontainers
range constructor3.09e-041.48e-048.72e-057.29e-022.08e-01
ordered list constructor3.45e-026.93e-021.45e-011.86e-015.74e-01
list constructor1.23e-011.33e-011.55e-011.12e-015.12e-01
ordered array constructor5.06e-036.42e-032.89e-019.82e-023.01e-01
array constructor1.13e-011.18e-014.63e-011.45e-015.08e-01
element addition3.08e-078.26e-072.21e-071.50e-071.18e-06
element removal3.44e-078.17e-072.61e-071.78e-074.26e-07
membership test1.24e-071.00e-061.50e-071.00e-075.72e-07
union1.61e-041.96e-041.44e-042.15e-011.11e+00
intersection9.08e-049.48e-049.26e-045.22e-021.65e-01
difference1.57e-041.97e-041.43e-041.56e-014.84e-01
symmetric diference1.62e-042.01e-041.44e-042.62e-019.13e-01
equality test7.80e-057.82e-055.89e-051.81e-021.81e-02
subset test7.92e-058.12e-058.22e-051.81e-021.81e-02
conversion to list4.71e-022.78e-014.35e-025.77e-025.32e-02
pickle dump & load4.02e-046.27e-045.08e-042.41e-015.75e-01
“naive” conversion to array5.12e-022.92e-014.75e-021.20e-011.18e-01
“optimized” conversion to array1.27e-033.40e-02nannannan
selection1.77e-065.33e-051.14e-06nan1.64e-05
contiguous slice9.38e-059.51e-056.99e-05nan2.04e-02
slice2.88e-033.04e-011.00e-01nan4.74e-01
small slice8.93e-053.00e-013.60e-03nan1.79e-02

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javagae/JPA/Datastore如何查询无主列表   java从xml中读取未知元素   java如何在控制台上显示MavReplugin单元测试覆盖率报告   java什么被认为是遍历LDAP DIT的正确方法?   Eclipse(Java)在创建了一个新包之后,我无法向其中添加源文件   java new REngine启动并立即停止   java Android:如何从保存在SQLite数据库中的listview中删除项目?   找不到java Gradle DSL方法:“compile()”错误   java使用POI获取具有特定列名的每一行中的值   java解析JSON文件   java中断for循环,返回4个结果,而不是2个   LDAP处理过程中发生java未分类异常;嵌套的异常是javax。命名。NamingException   当表单在基于spring3注释的控制器中验证失败时,java引用数据将丢失   java Android,从web获取数据并更新UI(多线程和MVC设计模式)   用于OS X Yosemite的java优化Swing程序