我需要帮助来做决定。我需要在应用程序中传输一些数据,并且必须在这三种技术之间做出选择。
我已经阅读了一些关于所有技术的内容(教程、文档),但仍然不能决定…
它们是如何比较的?
我需要元数据(接收和读取文件而不需要任何附加信息/文件的能力)、快速读/写操作、存储动态数据的能力(如python对象)的支持。
我已经知道的事情:
NumPy速度非常快,但无法存储动态数据(如python对象)。(元数据呢?)
HDF5速度非常快,支持自定义属性,易于使用,但不能存储python对象。
此外,HDF5本机序列化numpy数据,因此,imho、numpy与HDF5相比没有任何优势。
Google Protocol Bufferssupport self-describing太快了(但目前对python的支持很差,速度慢而且有问题)。可以存储动态数据。减号-自我描述在python中不起作用,大于等于1 MB的消息序列化/反序列化速度不太快(读取“slow”)。
PS:我需要传输的数据是numpy/scipy(数组、复杂结构数组等)的“工作结果”。
UPD:需要跨语言访问(C/C++/Python)

最佳答案

在您的问题中似乎有一个轻微的矛盾——您希望能够存储Python对象,但您还需要C/C++访问。我认为,无论您选择哪种方式,都需要将您的奇特的Python数据结构转换为更静态的结构,如数组。
如果您需要跨语言访问,我建议使用HDF5,因为它是一种文件格式,专门设计为独立于语言、操作系统、系统体系结构(例如加载时,它可以自动在big endian和little endian之间转换),并专门针对USER从事科学/数值计算。我对Google协议缓冲区不太了解,所以我不能对它评论太多。
如果您决定使用HDF5,我还建议您使用h5py而不是pytables。这是因为PyTe表创建了HDP5文件,其中有大量额外的Pythic元数据,这使得读取C/C++中的数据有点麻烦,而H5PY不创建任何这些额外的内容。您可以找到一个比较,他们还提供一个指向Pytables FAQ的链接,以获取他们对该问题的看法,这样您就可以决定哪一个最适合您的需求。
另一种与hdf5非常相似的格式是here。这也有python绑定,但是我在使用这种格式方面没有经验,所以我不能真正评论它的存在,而且它也被广泛用于科学计算。

关于python - Google Protocol Buffers,HDF5,NumPy比较(传输数据),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4125855/

10-13 09:09