序列化 numpy 数组列表并读回/反序列化为 Javascript
Posted
技术标签:
【中文标题】序列化 numpy 数组列表并读回/反序列化为 Javascript【英文标题】:Serialize a list of numpy arrays and read back/deserialize into Javascript 【发布时间】:2021-03-11 17:08:53 【问题描述】:考虑一个 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 侦听器中。 Base64 解码字段并使用高效的 javascript 反序列化库反序列化为二进制数组我对支持两种语言的 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 格式:但这似乎需要实际写入磁盘/文件系统?
欢迎使用这两种技术的工作代码或可能的不同库/方法。
【问题讨论】:
【参考方案1】: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
)
【讨论】:
以上是关于序列化 numpy 数组列表并读回/反序列化为 Javascript的主要内容,如果未能解决你的问题,请参考以下文章
使用 .NET 4.0 任务模式使用 HTTPClient .ReadAsAsync 将 JSON 反序列化为数组或列表