使用NumPy-like语法操作类似JSON的数据。
项目描述
Awkward Array 是一个用于 嵌套、可变大小数据 的库,包括任意长度的列表、记录、混合类型和缺失数据,使用 类似 NumPy 的语法。
数组是 动态类型 的,但对其的操作是 编译并快速 的。当数组维度规则时,它们的行为与 NumPy 相同,当它们不规律时,则进行推广。
动机示例
给定一个包含具有 x
、y
字段(在 y
字段中有嵌套列表)的对象列表的数组
import awkward as ak
array = ak.Array([
[{"x": 1.1, "y": [1]}, {"x": 2.2, "y": [1, 2]}, {"x": 3.3, "y": [1, 2, 3]}],
[],
[{"x": 4.4, "y": [1, 2, 3, 4]}, {"x": 5.5, "y": [1, 2, 3, 4, 5]}]
])
以下操作切片出 y
值,删除每个内部列表的第一个元素,并在剩余的所有内容上运行 NumPy 的 np.square
函数
output = np.square(array["y", ..., 1:])
结果是
[
[[], [4], [4, 9]],
[],
[[4, 9, 16], [4, 9, 16, 25]]
]
仅使用 Python 的等效代码是
output = []
for sublist in array:
tmp1 = []
for record in sublist:
tmp2 = []
for number in record["y"][1:]:
tmp2.append(np.square(number))
tmp1.append(tmp2)
output.append(tmp1)
使用 Awkward Array 的表达式更加简洁,使用了来自 NumPy 的熟悉语法,并且它还具有类似 NumPy 的性能。对于比上述问题大 1000 万倍的问题(在 2.2 GHz 处理器上的单线程),
- Awkward Array 的一行代码运行只需 1.5 秒,并使用 2.1 GB 的内存,
- 使用 Python 列表和字典的等效代码运行需要 140 秒,并使用 22 GB 的内存。
当在 Numba 的 JIT 编译函数中使用时,Awkward Array 的速度甚至更快。
请参阅 awkward-array.org 上的入门文档 以获取介绍,包括您可以在 Web 浏览器中尝试的 无安装演示。
获取帮助
- 在 awkward-array.org 上查看文档。
- 在 GitHub Issues 上报告错误、请求功能以及请求额外的文档。
- 如果您有一个 "我该如何..." 的问题,请从 "Q&A" 类别开始一个 GitHub Discussion。
- 或者,在带有 [awkward-array] 标签的 StackOverflow 上询问。请确保包括您使用的任何其他库的标签,例如 Pandas 或 PyTorch。
- 要实时提问,请尝试 Gitter 的 Scikit-HEP/awkward-array 聊天室。
安装
Awkward Array 可以通过 pip 从 PyPI 安装
pip install awkward
awkward
包是纯 Python 的,并且它将作为依赖项下载 awkward-cpp
编译组件。如果您的平台和 Python 版本没有 awkward-cpp
二进制包(wheel),pip 将尝试从源代码编译它(这需要额外的依赖项,例如 C++ 编译器)。
Awkward Array 还可在 conda-forge 上找到
conda install -c conda-forge awkward
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源分布
awkward-2.6.8.tar.gz (6.1 MB 查看哈希值)
构建分布
awkward-2.6.8-py3-none-any.whl (831.7 kB 查看哈希值)
关闭
awkward-2.6.8.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 86faa8e313aedc845fb42019dee72791d5e5558554c5d2828e8b6fafb51425e4 |
|
MD5 | 3d93aa6720195217fdc0279567915c65 |
|
BLAKE2b-256 | 1f538c59e96301dec45601b0dab6d7860bb850cc79c60c106002ee42d3043d04 |
关闭
awkward-2.6.8-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3a69acbe8948e6d69f23550ec82cb1258c8a6ba7ba6e0d7bcace12404ae66506 |
|
MD5 | b2a7b786ef1268f992fcfee0a320dcc7 |
|
BLAKE2b-256 | 0b0fcbf37d68cd7814ab638f628f68cf48c49e8630746ec0dcb6e1167f9459d1 |