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

2024-09-22 10:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大约10个变量(变量/数组/对称矩阵),我想通过一个url获得它们。因为我将使用restapi,所以url的大小有一个限制,所以我需要将其编码为最小长度的字符串并加密。你知道吗?我一直认为谷歌或其他网站有时在地址完全不可识别的情况下就是这样传输信息的

我最初的想法是用科学记数法对所有数字进行编码,并使用分隔符(例如2.4e14\uu3.1e12\u2.5e10)传递数字2.4e14和数组[3.1e12\u2.5e10]),然后对这个字符串进行编码。可能使用另一个基(带数字+字母的基)进行进一步的串联,但我不确定如何节省这么多字符串空间。你知道吗

也许有一个现有的图书馆或技术?我没找到。你知道吗


Tags: 字符串restapi信息url编码网站地址情况
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))

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

但是,这并不是最短的表示。传输足够的信息来完全重建对象。如果它足够短,它是最容易扩展和修改的选择。你知道吗

相关问题 更多 >