【问题标题】:How encode numpy arrays in string of minimal length?如何在最小长度的字符串中编码 numpy 数组?
【发布时间】:2018-11-23 16:27:58
【问题描述】:

我有大约十个变量(变量/数组/对称矩阵),我想通过一个 url 获取它们。因为我将使用一个 rest api,所以 url 的大小是有限制的,所以我需要将它编码成一个最小长度的字符串并加密。任何想法 ?我一直认为这就是谷歌或其他网站有时在地址完全无法理解时传输信息的方式

我最初的想法是用科学记数法编码所有数字并使用分隔符(例如,2.4e14__3.1e12_2.5e10_ 传递一个数字 2.4e14 和一个数组 [3.1e12_2.5e10])并对这个字符串进行编码。可能使用另一个基础(带有数字+字母的基础)进行进一步连接,但我不确定如何节省这么多的字符串空间。

也许有一个现有的库或技术?没找到。

【问题讨论】:

  • 不是网络专家,但 base64 和朋友将是“文本化”二进制数据的一种方法
  • 是否保证您的号码只有这样的两位有效数字?另外,为什么需要“……和加密”步骤?

标签: python arrays rest api url


【解决方案1】:

Pickle 和 base64 可以很好地完成这项工作。您的浮点数保持为二进制,而不是通过 ascii 转换。

>>> import numpy as np
>>> a = np.array([0,1,2])
>>> import pickle
>>> import base64
>>> b64 = base64.b64encode(pickle.dumps(a))

在另一端

>>> n = pickle.loads(base64.b64decode(b64))
>>> print(n)
array([0, 1, 2])

但是,这可能不是最短的表示形式。传输足够的信息以完全重建对象。如果它足够短,它是最容易扩展和修改的选项。

【讨论】:

    【解决方案2】:

    您可以将一个numpy对象转换为python列表。然后将列表转换为json字符串。

    >>> import numpy as np
    >>> import json
    >>> a = np.array([0,1,2])
    >>> b = a.tolist()
    >>> c = json.dumps(b)
    

    同样,你可以通过以下方式将json字符串转换为numpy:json string->list->numpy

    >>> d = np.array(json.loads(c))
    

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多