如何在最小长度的字符串中编码numpy数组?

时间:2018-06-14 01:06:04

标签: python arrays rest api url

我有大约十个变量(变量/数组/对称矩阵),我想通过一个url。因为我将使用rest api,所以url的大小有限制所以我需要用最小长度的字符串对其进行编码并加密。任何的想法 ?我总是认为谷歌或其他网站有时会在地址完全可以启动时传输信息

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

也许现有的图书馆或技术?我没找到。

2 个答案:

答案 0 :(得分:0)

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])

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

答案 1 :(得分:0)

您可以将numpy对象转换为python list。然后将list转换为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))