以压缩二进制格式在golang中存储矩阵

时间:2015-09-23 18:59:19

标签: python numpy go

我正在探索GoPython之间的比较,特别是对于数学计算。我注意到Go有一个矩阵包mat64

1)我想问一个同时使用GoPython的人,如果有可比的Numpy savez_compressed存储数据的函数/工具以npz格式(即“压缩”二进制文件,每个文件的多个矩阵)用于Go的matrics?

2)此外,Go的矩阵可以处理像Numpy那样的字符串类型吗?

2 个答案:

答案 0 :(得分:2)

1).npz是一种numpy特定格式。 Go本身不太可能在标准库中支持这种格式。我也不知道今天存在的任何第三方库,并且(10秒)搜索没有弹出一个。如果你需要专门的npz,请使用python + numpy。

如果您只想要Go中的类似内容,则可以使用任何格式。二进制格式包括golang binarygob。根据您要执行的操作,您甚至可以使用非二进制格式,如json,只需自行压缩即可。

2)Go没有内置矩阵。您找到的库是第三方,它只处理float64 s。

但是,如果您只需要以矩阵(n维)格式存储字符串,则可以使用n维切片。对于二维,它看起来像这样:var myStringMatrix [][]string

答案 1 :(得分:1)

npz个文件是zip个档案。归档和压缩(可选)由Python zip模块处理。 npz包含您保存的每个变量的一个npy文件。任何基于操作系统的归档工具都可以解压缩并提取组件.npy文件。

所以剩下的问题是 - 你能模拟npy格式吗?它不是微不足道的,但也不难。它由一个包含形状,步幅,dtype和顺序信息的标题块组成,后跟一个数据块,实际上是数组缓冲区的字节图像。

因此缓冲区信息和数据与numpy数组内容紧密相关。如果变量不是普通数组,save使用Python pickle机制。

首先,我建议使用csv格式。它不是二元的,也不是快速的,但每个人和他的兄弟都可以生成并阅读它。我们经常使用np.loadtxtnp.genfromtxt来阅读有关阅读此类文件的问题。查看np.savetxt的代码,了解numpy如何生成此类文件。这很简单。

另一个通用选择是使用数组tolist格式的JSON。我想到了这一点,因为GO是谷歌本土的Web应用程序替代Python的替代品。 JSON是一种基于简化的Javascript语法的交叉语言格式。