我正在探索Go
和Python
之间的比较,特别是对于数学计算。我注意到Go
有一个矩阵包mat64。
1)我想问一个同时使用Go
和Python
的人,如果有可比的Numpy
savez_compressed
存储数据的函数/工具以npz
格式(即“压缩”二进制文件,每个文件的多个矩阵)用于Go
的matrics?
2)此外,Go的矩阵可以处理像Numpy
那样的字符串类型吗?
答案 0 :(得分:2)
1).npz是一种numpy特定格式。 Go本身不太可能在标准库中支持这种格式。我也不知道今天存在的任何第三方库,并且(10秒)搜索没有弹出一个。如果你需要专门的npz,请使用python + numpy。
如果您只想要Go中的类似内容,则可以使用任何格式。二进制格式包括golang binary和gob。根据您要执行的操作,您甚至可以使用非二进制格式,如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.loadtxt
或np.genfromtxt
来阅读有关阅读此类文件的问题。查看np.savetxt
的代码,了解numpy
如何生成此类文件。这很简单。
另一个通用选择是使用数组tolist
格式的JSON。我想到了这一点,因为GO
是谷歌本土的Web应用程序替代Python的替代品。 JSON是一种基于简化的Javascript语法的交叉语言格式。