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

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编译器整数错误   java为什么我不能在eclipse中将jsp添加到google应用程序引擎中?   用于计算的java交换机时区   java将另一个表中的列添加到现有SQL/query语句中   Java线程:在start()之后对线程对象调用run()方法   java问题:使用Xlint重新编译:未选中以获取详细信息   java如何使用控制台中的输入   java计算字符串中最高数字的数量   java将数据源密码置于上下文之外。xml   java如何防止变量永远运行?   是VB。NET SmtpClient API受限于Java SendMail?   java在Jmeter中生成会话ID   使用java从XML检索文本和标记   无法参数化Java swing JComboBox   java在maven多模块项目的父配置中将模块设置为其他模块的依赖项