3

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

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 的空间。)

有谁知道巧妙或有效的算法来做到这一点?

4

3 回答 3

3

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

于 2011-12-14T22:07:05.993 回答
1

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

于 2011-12-15T13:24:42.873 回答
0

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

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

于 2011-12-15T00:13:16.313 回答