这是“需要了解有关问题的详细信息”:作为我正在编码的算法的一部分,它将大小为 3000X400 的矩阵作为输入。对于每一行,我需要创建一个方阵,即大小为 400x400。完成此操作后,我需要计算一个数字 R(i,j),其中 i,j 是为每一行生成的方阵 (400x400)。
如果您愿意,可以将其视为相关矩阵的计算。而不是相关性,我有自己的算法,可以对生成的方阵进行运算。我必须计算 0<=i<3000 和 j=i+1 到 3000 的 R(i,j)
这是我的问题:我动态分配一个指向方阵的 3D 数组,即我的 3D 数组是 (3000X400X400)。我没有足够的内存来执行此操作。对于较小的尺寸,即(800*400*400)左右,我的代码可以完美运行。但显然没有足够的内存将其扩展到 (3000*400) 的情况。我该怎么做呢?
一个(不太好的)解决方案:我不是计算每个方阵,而是计算 i 的方阵,然后当我循环 j = i+1 到 3000 时,我重新计算每个 j 的方阵然后计算 R(i,j)。显然,我正在重新计算一大堆矩阵,但至少它是有效的代码。
有没有你们能想到的更快的解决方案?我有足够的能力,定性的解决方案就足够了。我正在考虑计算方阵并将它们写入文件并在需要计算 R(i,j) 时读取它们 - 这会比我给出的重新计算解决方案更快吗?
感谢您的建议!!
使用写入文件并从中读取的解决方案要慢得多。任何非Hadoop的想法任何人?