【发布时间】:2018-07-24 01:39:40
【问题描述】:
我想将一个稀疏的数字矩阵(整数,但它可以是浮点数)保存到一个文件中以进行数据交换。对于稀疏矩阵,我的意思是一个高百分比的值(通常为 90%)等于 0 的矩阵。在这种情况下,稀疏与文件格式无关,而是与矩阵的实际内容有关。
矩阵的格式如下:
col1 col2 ....
row1 int1_1 int1_2 ....
row2 int2_1 .... ....
.... .... .... ....
通过使用文本文件(制表符分隔),文件大小为 4.2G。我可以使用哪种文件格式(最好是普遍存在的 .txt 文件)轻松加载和保存这个稀疏数据矩阵?我们通常使用 Python/R/Matlab,因此首选它们支持的格式。
【问题讨论】:
-
你是如何存储这些稀疏数据的?注意:如果您使用 .txt 或任何其他非压缩数据,那么显然大小不会改变。
-
是的,txt 显然是大小的上限,但它可以很容易地在不同框架之间交换。我正在寻找一种受科学库支持的类似压缩的格式(例如 python 中的 pandas)。
-
如果我没记错的话,稀疏数组存储为非零元素的 3 个值(row_in_array、col_in_array、val)的行。所以基本上你可以用这种格式表达你的数组,使用可以包含每一位信息的最小数据类型(某种
uint用于行/列,可能double用于值),然后将其导出为任何二进制你想要的格式,然后在目标软件中导入,用它在本地创建一个稀疏数组。 -
@gc5 你可能误解了我的意思。稀疏矩阵的全部意义在于您仅在非零元素上存储(并执行操作)。存储元素的方式是每个元素使用 3 个值。您的任务是以节省空间的方式将此信息编码到文件中。如果您使用
uint而不是double,您也许可以节省一些空间。如果您选择将其导出为 MATLAB.mat文件(v7 或更高版本),它将被压缩,从而节省更多空间。您不必导出源软件对sparse数组的任何表示,并希望以后可以阅读它。 -
@gc5 是的,您可以将稀疏的 Matlab 矩阵保存在 mat 文件中,就像您可以保存任何变量一样。但是,快速测试表明文件大小可能并不总是更小。使用标准
save、eye(100)和sparse(eye(100))分别为 257 和 364 字节。虽然一个 1 的 1000*1000 零矩阵是 3.63kB 标准,而稀疏时是 215B。优势取决于您的矩阵的稀疏程度。注意有different compression options
标签: python r matlab format sparse-matrix