基于位域的cython快速数集

sparsebitfield的Python项目详细描述


sparsebitfield

这是一个https://github.com/stestagg/bitfield的叉子 适用于稀疏的位场和大量的数据。这个 api是相同的,但是对python 2的支持已经被放弃。

警告:序列化机制目前不可移植。

安装

$ sudo pip3 install sparsebitfield

用法

>>>importsparsebitfield>>>field=sparsebitfield.SparseBitfield()>>>field.add(100)>>>print(list(field))[100]>>>second=sparsebitfield.SparseBitfield([2,100])>>>list(field|second)[2,100]>>>second.add(10000)>>>second.pickle()b'BZ:x\x9c\xed\xce\xc1\t\x00\x0c\x04\xb0+8@\xf7\x9f\xd6\x87\x0f7P(\xc9\x04I\x8eZ\xb9:\x00\x93\xd4\xef\x00\x00\x00\x00\x00\x00\x00<\xb3\x01\xda\x86\x00\x17'>>>importrandom>>>large=sparsebitfield.SparseBitfield(random.sample(range(1000000),500000))# 500,000 items, randomly distributed>>>len(large)500000>>>len(large.pickle())125269# 122KB>>>large=sparsebitfield.SparseBitfield(range(1000000))# 1 million items, all sequential>>>len(large)1000000>>>len(large.pickle())69# <100 bytes

稀疏位字段支持大多数与常规集相同的操作/用法, 有关示例,请参见测试。

设计

sparsebitfield被设计用来有效地处理跟踪大型项目集。

主要设计目标是:

  • 节省空间的序列化格式
  • 快速的成员资格测试和设置差异
  • 大稀疏位域的空间效率处理
  • 支持大整数(>;2**64)

在内部,sparsebitfield通过使用1-d位图分割成 页。这些页面按排序列表进行组织。

在一页中,一个数字通过设置记录在集合中 第n位是1。即集合([1])被记录为…00000010b,而 集合([1,4])将是…00010010b。

如果特定页为空(该范围内没有集合成员)或已满,则 位字段将被丢弃,并由空标志或完整标志表示。页 这本书并不是为了不占用任何记忆而写的。也是空的 pickled数据中不包括页。

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

推荐PyPI第三方库


热门话题
java测试访问令牌过滤器   close()上的java Apache POI运行时异常   java为什么Eclipse中的GWT总是显示错误404?   java从socket python服务器接收消息   java mediaRecorder:start()函数失败   不关闭DB连接可能是Tomcat上Java堆溢出的原因吗?   java JFrame无法关闭   java BigQuery加载本地文件不起作用,位置有问题   java可以在递归任务中使用吗?   servlets如何从JSESSIONID加载Java HttpSession?   java将JFileChooser与PDFBox一起使用时,文件不会另存为pdf,但保存时不带扩展名   java将处理结果存储在表中   java算法发现循环世界中重叠间隔的持续时间(24小时)   在windows 10上双击Eclipse安装程序可执行文件(eclipseinstjrewin64.exe)后,java不会发生任何事情   java编译和部署自定义Solr请求处理程序   Java/Android崩溃ApacheCommonsio2。4.jar   spring web应用程序中的java集成收件箱功能   java Grizzly、Jersey和Spring自动布线问题   java如何在pom中添加jar文件依赖项。xml   关于Android中大量GUI更新编码的java概念(GUI处理程序)