找到一个非常非常大的矩阵的转置

时间:2011-12-14 22:03:43

标签: computer-science transpose large-data

我有这个巨大的二维数据数组。它按行顺序存储:

A(1,1)A(1,2)A(1,3)..... A(n-2,n)A(n-1,n)A(n,n)

我想将其重新排列为列顺序

A(1,1)A(2,1)A(3,1)..... A(n,n-2)A(n,n-1)A(n,n)

数据集相当大 - 超过计算机上的RAM。 (n约为10,000,但每个数据项占用大约1K的空间。)

有人知道光滑或有效的算法吗?

3 个答案:

答案 0 :(得分:3)

您需要一个Matrix类,以便您的整个应用程序通过类的实例访问矩阵。然后转置可以设置一个标志,在访问元素时反转索引。即时转置!

答案 1 :(得分:1)

创建n个空文件(如果可以的话,为n元素保留足够的空间)。迭代原始矩阵。将元素(i,j)附加到文件j。完成后,请附加刚刚写好的文件。

答案 2 :(得分:0)

天真的方法是只读取文件10000次并找到每行的相应列。这应该很容易实现,但我不知道运行程序需要多长时间。

在您的评论中,您提到输出另一个文件,然后您应该使用sort进行排序。这是一个坏主意,因为它需要永远排序这么大的文件。排序是一个复杂的(或至少是资源密集型)问题,因此将转置概括为排序可能是错误的方法。