我有这个巨大的二维数据数组。它按行顺序存储:
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的空间。)
有人知道光滑或有效的算法吗?
答案 0 :(得分:3)
您需要一个Matrix类,以便您的整个应用程序通过类的实例访问矩阵。然后转置可以设置一个标志,在访问元素时反转索引。即时转置!
答案 1 :(得分:1)
创建n
个空文件(如果可以的话,为n
元素保留足够的空间)。迭代原始矩阵。将元素(i,j)
附加到文件j
。完成后,请附加刚刚写好的文件。
答案 2 :(得分:0)
天真的方法是只读取文件10000次并找到每行的相应列。这应该很容易实现,但我不知道运行程序需要多长时间。
在您的评论中,您提到输出另一个文件,然后您应该使用 sort
进行排序。这是一个坏主意,因为它需要永远排序这么大的文件。排序是一个复杂的(或至少是资源密集型)问题,因此将转置概括为排序可能是错误的方法。