我正在使用一个大矩阵(不稀疏),它包含大约10 ^ 10双。 当然我不能把它记在内存中,我只需要一行。
我想把它分成文件,每个文件1行(它需要很多文件),每次我需要一行时只读一个文件。你知道更有效的方法吗?
答案 0 :(得分:1)
为什么要将其存储在不同的文件中?你不能使用单个文件吗?
您可以使用RandomAccessFile类中的函数来执行该文件的读取。
答案 1 :(得分:0)
所以,每个文件800KB,听起来像是一个很好的分工。当然,没有什么能阻止你使用一个巨大的文件。一个矩阵,至少有一个非稀疏的矩阵,可以被认为是一个固定长度记录的文件,使得随机访问变得微不足道。
如果你每行存储一个文件,我可能会建议制作一个对应于十进制数字的目录树,所以0/0/0/0
到9/9/9/9
。
考虑某种方式......
答案 2 :(得分:0)
如果您要将其保存在文件中,我相信序列化将节省空间/时间而不是将其存储为文本。
序列化双精度将它们存储为2个字节(加上序列化开销),这意味着在保存或加载文件时,您不必在字符串之间来回转换这些双精度数。
答案 3 :(得分:0)
这取决于你想要执行的算法,但我想在大多数情况下,每个文件包含一些正方形或矩形区域的表示会更好。
例如,矩阵乘法可以通过将矩阵分解为子矩阵来递归地完成。
答案 4 :(得分:0)
我建议使用像Ehcache这样的磁盘持久缓存。只需将其配置为根据需要在内存中保留尽可能多的矩阵片段,它将负责序列化。您所要做的就是决定碎片的方式。
我想到的另一种方法是使用Terracotta(顺便说一句,最近购买了Ehache)。获得一个大型网络连接堆非常棒,它可以轻松管理您的10 ^ 10双值而无需在代码中关注它。