【问题标题】:Standard format for writing Compressed Row Storage into text files?将压缩行存储写入文本文件的标准格式?
【发布时间】:2015-11-20 05:35:46
【问题描述】:

我有一个以压缩行存储 (CRS) 格式存储的大型稀疏矩阵。这基本上是三个数组:一个包含值的数组、一个列索引数组和一个包含行指针的最终数组。例如。 http://web.eecs.utk.edu/~dongarra/etemplates/node373.html

我想将此信息写入文本 (.txt) 文件,该文件旨在使用 C 读取并放入三个数组中。我目前计划通过将 Value 数组中的所有条目写在一个用逗号分隔的长行中来做到这一点。例如。 5.6,10,456,78.2,...等。然后对其他两个数组执行相同的操作。

我的 C 代码将结束读取第一行,将所有值放入标有“Value”的数组中。以此类推。

问题

这是“正确的”吗?还是有将 CRS 数据放入文本文件的标准方法?

【问题讨论】:

    标签: c sparse-matrix


    【解决方案1】:

    没有我知道的标准格式。您决定一种让您的生活更轻松的格式。

    首先,考虑一下,如果您想查看其中一个文本文件,您会立即被冗长的行所拖累。一些文本编辑器可能只是讨厌你。分割线没有错。

    其次,考虑在文件的开头写出每个数组中的元素数量(好吧,我想三个数组只有两个不同的数组长度)。这将让您预先分配您的数组。如果您手头有所有数组长度,则可以选择进行一次内存分配。

    最后,考虑写出一些合理的标签名称。某种可以识别您的文件的标题是正确的格式,然后是表示每个数组的开头的东西。对于您的代码来说,检测文件问题是一件很理智的事情。它可能只是一个角色,但它是某种东西。

    现在...称我为邋遢的老程序员,但我可能只会用二进制写很多东西。特别是如果它是浮点数据,我不想处理当您将数字写为文本时获得的精度损失(或者当您以全精度编写它们时它们可以消耗的空间)。二进制文件易于编写和快速运行。如果您要在具有不同字节序的平台上使用它们,则必须小心。

    这是我的 2 美分。希望它对你有用。

    【讨论】:

    • 第三段中的想法(关于存储每行的长度)将阻止您轻松地手动修改文本文件。这是我认为过早优化的事情。二进制格式通常是一个巨大的禁忌,因为它通常非常方便手动读取或调整文本文件。 (智慧之言there)。我同意你建议中的所有其他内容。
    • 这可能取决于作者的意图。由于他们没有给出一个,我提出了一些建议以供考虑。现在,关于数组大小,手动向矩阵添加一个值比调整文件顶部的一两个数字要困难得多。除非您更改最后一行,否则您必须调整您插入的行后面的所有行指针。去他妈的! =)
    • 是的。毕竟手动调整 CSR 可能不值得,在这方面存储行长度确实有意义。如果目的是修改文件(而不仅仅是能够读取它们以检查一切是否正常),那么最好逐行存储(行、列、值)三元组。
    • 一般来说,它会成为最通用的稀疏矩阵文件格式,我同意……但写三元组对于将文件读回 CRS 格式并没有多大帮助。我可能会将这一行写在一行上,然后在以下几行上写成对的 (column, value)。为了清楚起见,甚至可以用空行终止它。
    • 是的,“你决定一种让你的生活更轻松的格式”是这里最重要的部分。
    【解决方案2】:

    如果您想坚持一些广泛使用的标准,请查看Matrix Market。这是一个存储库,其中包含在各种工程和科学问题中出现的许多矩阵。您也可以找到软件库来保存和读取矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多