有效加载或合并大小不等的元素集合的简单技巧

jagged的Python项目详细描述


高效存储相同类型、大小不均的阵列

Pypi Version

jagged是一个正在进行的业余项目,探索存储全景图 对于包含(大量)具有相同类型的数组的数据集 列的数量,但行的数量不同。这样的例子 使用jagged的数据集是多变量的集合。 时间序列(短动物行为片段)和分子集合 (表示为可变长度的字符串)。

jagged旨在帮助批量分析笔记本和集群中的数据。 或者交互,提供一个非常轻量级的商店。锯齿状提供快速 检索包含数百万行的许多GB数据集的数组子集。

按设计约束

重点是快速检索任意批处理查询。

锯齿状存储仅附加。

没有事务、复制或分发。 它是本地或网络磁盘中的所有文件。

尚未作出重大努力来优化 (尽管有些后端工作非常顺利)。

目前,一切都是用纯python实现的简单算法。

安装

使用pip就足够了:

pip install jagged

jagged stores构建在几个高质量的python库之上:numpy、blosc, bloscpack、bcolz和joblib。它还需要whatami和python的未来。 测试依赖于pytest(您现在需要安装所有要测试的依赖项, 这很快就会改变)。

展示

使用锯齿很简单。有不同的实现提供 两个基本方法:append将新数组添加到存储,get检索 由数组在存储中的插入顺序标识的数组集合。

importos.pathasopimportnumpyasnpfromjagged.mmap_backendimportJaggedByMemmap# A Jagged instance is all you needjagged=JaggedByMemmap(op.expanduser(path='~/jagged-example/mmap'))# You can drop here any you want to# Generate a random datasetrng=np.random.RandomState(0)max_length=2000num_arrays=100originals=[rng.randn(rng.randint(0,max_length),50)for_inrange(num_arrays))# Add these to the store (context is usually optional but recommended)withjagged:indices=map(jagged.append,originals)# What do we have in store?print('Number of arrays: %d, number of rows: %d'%(jbmm.narrays,jbmm.nrows))print('Jagged shape=%r, dtype=%r, order=%r'%(jagged.shape,jagged.dtype,jagged.order))# Check roundtriproundtripped=jagged.get(indices)print('The store has %d arrays')# Jagged stores self-identified themselves (using whatami)print(jagged.what().id())# Jagged stores can be iterated in chunks# See iter# Jagged stores can be populated from other jagged stores# Some jagged stores allow to retrieve arbitrary rows as fast# as arbitrary arrays.

后端

尽管变化很快,jagged已经提供了以下存储后端 这可以被认为是有效和稳定的。其他的后端也在计划中。

Backendcompchunkcolumnmmaplinlazycont
JaggedByBloscXX
JaggedByCarrayXXXX
JaggedByH5PyXXXXX
JaggedByJoblibXX
JaggedByMemMapXXXX
JaggedByNPY
JaggedByBloscpackX
JaggedByPickleXX
  • comp:可以压缩
  • chunk:可以分块
  • column:连续存储数组的列(可以通过使用每列存储轻松实现)
  • mmap:可以打开指向数据的memmap
  • lin:可以检索任何行,而无需检索整个行
    它包含的数组
  • 惰性:数组不是立即获取的;这也意味着可以对它们进行管理
    作为操作系统的虚拟内存(仅限jaggedbymmap)
  • cont:检索到的数组可以强制位于连续的内存段中

基准

哪些后端和参数最有效取决于数据是否可压缩,以及 阵列的大小。我们很清楚什么对我们的数据最有效 提供一个基准框架。在这里找到preview

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

推荐PyPI第三方库


热门话题
java在jframe中模糊的背景上创建一个透明的矩形   java和super之间有区别。getX()和简单的x?   使用ant的java删除eclipse项目   java找不到。txt文件?   多线程Java wait()notify()   带按钮的java透明控件   java Android Studio 3无法构建我的项目   性能最佳(最快且节省内存)的Java收集/数据结构,可同时插入和删除项   spring+hibernate集成中的java ClassNotFoundException   java如何在Android上建立异步URL连接?   java当我选择contacts选项卡时,选项卡栏消失了   java根据数据库中的日期获取结果,不考虑时间   java如何访问WebChromeClient中的方法?   java如何在安卓中使用两行列表项?   spring Swagger Java日期格式验证引发异常