【问题标题】:huge matrix in java [closed]java中的巨大矩阵[关闭]
【发布时间】:2011-06-25 13:01:32
【问题描述】:

我有一个尺寸为 20,000,000*3 的矩阵存储在一个文件中。我想快速访问它。我该怎么做? 我不能宣布这么大的地图。我该怎么办? 请帮忙。

【问题讨论】:

标签: java matrix maps


【解决方案1】:

有多种可能性:

  • 如果矩阵是稀疏的,则将其加载到映射中,忽略值为零的条目。

  • 如果矩阵的文件版本具有固定大小的记录,则创建内存映射缓冲区并使用索引来访问各个单元格。

  • 如果访问模式是顺序的,那么就读取它。

  • 等等。

如果您想要更具体的答案,您需要提供更多详细信息;例如文件如何表示,矩阵是否稀疏,访问模式是什么,是否需要更新矩阵等。


矩阵不是稀疏的。它基本上包含 3 行,所有整数。矩阵以<row1><row2>row3> 格式存储在文本文件中。我不需要更新它;我只需要对第 1 行中的值进行多次搜索。

好的。

  • 将文件转换为二进制格式。这将使每一行占用相同的字节数,并使随机访问变得可行。

  • 搜索row1 中的值表明您需要对文件中的列进行排序,以便行在row1 上排序。 (或者,如果您还需要按原始行号查找行,请在第 1 列上创建索引。)

  • 然后使用MappedByteBuffer 将已排序/索引/转换的文件映射到内存中,并通过IntBuffer 访问它。

映射文件的总大小应该在 180Mb 左右,这在当今的典型 PC 上应该不是问题。

【讨论】:

  • 矩阵不是稀疏的,它基本上包含3行,所有ints.Matrix都以格式存储在文本文件中,我不需要更新它,我只需要对第 1 行中存在的值执行多次搜索
【解决方案2】:

我宁愿 Map 使用数组,但是这可能太大了。尝试找出矩阵的哪些部分将用于计算,研究一些分而治之/并行矩阵算法,这些算法通常将矩阵分解为较小的矩阵 - 在结构上或使用矩阵乘法、特征数和矩阵的其他代数属性。你可以做各种各样的事情,比如缓冲和缓存等,以加快对磁盘上数据的访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2012-06-04
    • 2013-03-15
    • 2011-05-19
    • 1970-01-01
    • 2015-09-08
    • 2013-05-04
    相关资源
    最近更新 更多