为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
精慕HU 2021-11-15 15:15:02
我正在探索Go和之间的比较Python,特别是对于数学计算。我注意到Go有一个矩阵包mat64。1)我想问一下同时使用这两种方法的人Go,Python是否有与Numpy's等价的功能/工具可比较,savez_compressed它以某种npz格式(即“压缩”二进制,每个文件有多个矩阵)存储Go's 矩阵的数据?2) 另外,Go 的矩阵可以像Numpy那样处理字符串类型吗?
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

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

如果你只是想从 Go 中得到类似的东西,你可以使用任何格式。二进制格式包括golang binarygob。根据您要执行的操作,您甚至可以使用非二进制格式(如json)并自行压缩。

2) Go 没有内置矩阵。你找到的那个库是第三方的,它只处理float64s.

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


查看完整回答
反对 回复 2021-11-15
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

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

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

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

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

另一个通用选择是使用tolist数组格式的JSON 。之所以想到这一点,GO是因为它是 Google 自己开发的用于 Web 应用程序的 Python 替代品。JSON 是一种基于简化 Javascript 语法的跨语言格式。


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信