1

我也有处理 n 维数组的组件。一个组件是用 python 编写的,它处理数据并将处理后的 ndarray 保存为tobytes(). 现在另一个组件是用java编写的,需要读取第一个组件产生的序列化ndarray。

我很好奇是否有任何现有的 java 库可以读取序列化的 numpy 数组。或者有更好的方式在 java 和 python 之间通信 ndarray。

任何建议表示赞赏!

谢谢!

4

2 回答 2

0

ND4J 支持读取和写入 Numpy 数组。查看 ND4J javadocs 中的xxxNpyYYYArray 方法

它可以读取和写入文件、字节数组甚至是指向 numpy 数组的原始指针。

指针方法允许在不复制或序列化的情况下使用数组。我们使用 jumpy 内部的指针方法(通过pyjnius运行 Java)以及使用javacpp 的 cpython/numpy 预设在 Java 进程中运行 cpython 解释器时。

于 2019-10-21T04:02:15.703 回答
0

我已经使用 Apache Arrow 来解决这个问题。

首先,pyarrow包有一个 numpy ndarray API 来将数组序列化为字节。基本上,ndarray 变成了一个箭头字节序列批次。

然后 java API 提供了一个VectorSchemaRoot从字节中读取它的方法。你可以得到箭头数组中的值。您可以使用此数组创建 ND4J 数组(如果需要),或直接操作您的数组。

详细操作可以参考 Apache Arrow 文档,如果有什么障碍我们可以在这里讨论。

此外,Arrow 使用本机内存来存储缓冲区,因此数据不在 Java 堆中。这在某些时候可能是一个问题。

任何其他解决方案也可以与我分享。:)

于 2022-01-14T11:09:31.740 回答