java中的巨大矩阵

时间:2011-06-25 13:01:33

标签: java matrix maps

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

2 个答案:

答案 0 :(得分:2)

有很多可能性:

  • 如果矩阵稀疏,请将其加载到地图中,省略值为零的条目。

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

  • 如果访问模式是连续的,那么只需阅读它。

  • 依此类推。

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


  

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

行。

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

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

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

映射文件的总大小应该在180Mb的范围内,这对于典型的PC来说应该不是问题。

答案 1 :(得分:0)

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