像numpy一样容易操作复杂数据结构的数组。
awkward的Python项目详细描述
与传统的循环计算相比,用矩形数值数据进行计算在numpy中更简单、更快。例如,考虑一下
all_r=[]forx,yinzip(all_x,all_y):all_r.append(sqrt(x**2+y**2))
与
all_r=sqrt(all_x**2+all_y**2)
后者不仅更易于阅读,而且比for循环快数百倍(并为隐藏的矢量化和并行化提供了机会)。但是,numpy抽象在数字或字符串的矩形数组中停止。虽然可以将任意python数据放在numpy数组中,但numpy的dtype=object本质上是一个固定长度的列表:数据在内存中不连续,操作没有矢量化。
笨拙数组是一个纯python+numpy库,用于处理复杂的数据结构,就像处理numpy数组一样。即使您的数据结构
- 包含可变长度列表(参差不齐/参差不齐),
- 深度嵌套(记录结构),
- 在同一列表中有不同的数据类型(异构),
- 被屏蔽、位屏蔽或索引映射(可为空),
- 包含交叉引用甚至循环引用,
- 需要按需提供python类实例,
- 不是在每个点(稀疏)定义的,
- 在内存中不连续,
- 不应一次全部加载到内存中(惰性),
这个库可以以columnar data structures的形式访问它们,具有numpy数组的效率。它们可以从json或python数据转换,从“awkd”文件、HDF5、Parquet或ROOT文件加载,也可以是像Arrow这样的内存缓冲区视图。
^ {STR 1 } $注:此项目的反馈通知awkward-1.0的开发,C++中的重新实现,使用更简单的用户界面,进入2020。在这里留下关于笨拙数组未来的评论(如github问题或google文档)。
安装
像其他python包一样安装笨拙:
pip install awkward # maybe with sudo or --user, or in virtualenv pip install awkward-numba # optional: integration with and optimization by Numba
或者使用conda:
安装conda config --add channels conda-forge # if you haven't added conda-forge already conda install awkward conda install awkward-numba # optional: integration with and optimization by Numba