如何解决序列化 numpy 数组列表并读回/反序列化为 Javascript
考虑一个 numpy 数组列表:
arr = [np.linspace(a1,a2,11) for a1,a2 in [(1,10),(20,30)]]
nparr = np.array(arr)
我想将其序列化以传输到 Javascript REST 客户端。首选方法是
- 高效地序列化为二进制安全格式并将其烘焙到 JSON 对象中的 Base64 编码字段
- 通过 http 传输 JSON 对象
- 将 JSON 对象接收到 javascript 侦听器中。
- 使用高效的 javascript 反序列化库对字段进行 Base64 解码并反序列化为二进制数组
我对支持两种语言的 apache arrow 进行了初步调查。
注意:我尝试了以下操作:
- 转换为二维 numpy 数组
- 转换为pyarrow
发生了以下事情
pyarr = pya.array(nparr)
ArrowInvalid Traceback (most recent call last)
<ipython-input-11-68eb3e5f578f> in <module>
----> 1 pyarr = pya.array(nparr)
ArrowInvalid: only handle 1-dimensional arrays
所以 pyarrow 在它可以序列化的数据结构方面似乎非常有限。我也在研究 apache parquet 格式:但这似乎需要实际写入磁盘/文件系统?
欢迎为这两种技术提供工作代码,或者可能采用不同的库/方法。
解决方法
Arrow 能够序列化浮点数组列表。但我认为如果列表是多维 numpy 数组,它需要一点帮助:
pa.array(
arr.tolist(),pa.list_(pa.float64())
)
但考虑到您的用例,由于所有数组的长度相同,我建议使用 Table
而不是 Array
schema = pa.schema(
[
pa.field(str(i),pa.float64())
for i in range(len(nparr))
]
)
table = pa.Table.from_arrays(
nparr,schema=schema
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。