【问题标题】:Serialize a list of numpy arrays and read back/deserialize into Javascript序列化 numpy 数组列表并读回/反序列化为 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 格式:但这似乎需要实际写入磁盘/文件系统?

欢迎使用这两种技术的工作代码或可能的不同库/方法。

【问题讨论】:

    标签: javascript python serialization pyarrow


    【解决方案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
    )
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多