在 Python 之外读取 numpy 数组

Abi*_*iel 6 python numpy

在最近的一个问题中,我询问了将大型 numpy 数组转换为分隔字符串的最快方法。我提出这个问题的原因是因为我想获取该纯文本字符串并将其传输(例如通过 HTTP)到用其他编程语言编写的客户端。显然,任何客户端程序都可以轻松使用分隔的数字字符串。但是,有人建议,由于字符串转换速度很慢,因此在 Python 端对数组进行 Base64 编码并将其作为二进制发送会更快。这确实更快。

我现在的问题是,(1)如何确保编码的 numpy 数组能够很好地传输到不同操作系统和不同硬件上的客户端,以及(2)如何在客户端解码二进制数据。

对于(1),我倾向于做如下的事情

import numpy as np
import base64
x = np.arange(100, dtype=np.float64)
base64.b64encode(x.tostring())
Run Code Online (Sandbox Code Playgroud)

我还有什么需要做的吗?

对于 (2),我很乐意在任何编程语言中提供一个示例,其目标是获取浮点数的 numpy 数组并将它们转换为类似的本机数据结构。假设我们已经完成了 Base64 解码并拥有一个字节数组,并且我们还知道 numpy dtype、维度以及所需的任何其他元数据。

谢谢。

Tho*_*ers 0

numpy arrays 方法的作用tostring基本上是为您提供数组数据使用的内存转储(不是 Python 的对象包装器,而只是数组的数据)。这与structstdlib 模块类似。对字符串进行 Base64 编码并将其发送应该足够好了,尽管您可能还需要发送所使用的实际数据类型以及维度(如果它是多维数组),因为您无法仅告诉它们从数据来看。

另一方面,如何读取数据在一定程度上取决于语言。大多数语言都有一种将这样的内存块作为特定类型的数组进行寻址的方法。例如,在 C 中,您可以简单地对字符串进行 Base64 解码,将其分配给(在您的示例中)afloat64 *并索引。这并没有为您提供任何内置的保护措施、函数以及 numpy 数组在 Python 中具有的其他操作,但这是因为 C 在这方面是一种完全不同的语言。