MATLAB:大型文本文件到Matrix转换

时间:2018-05-05 09:32:03

标签: matlab matrix text transpose

我需要在MATLAB中读取一个文本文件,每行包含436个浮点值(文本文件大小为25GB,因此可以估算行数),然后将其转换为矩阵,以便我可以进行转置。怎么做?格式说明符不会太长吗?

1 个答案:

答案 0 :(得分:0)

假设文件中的浮点数以浮点后面有15个数字的格式写入。所以我们每个浮点数都有17个字符。然后,让我们假设它们被一个字符分隔,并且我们在每一行的末尾都有一个\n,这样我们总共会有436*18=7848个字符,假设ascii字符将使用每个字节。然后,你的文件使用大约25G的内存,所以你可以说你有(25*2^30)/7848=3.6041e+06行(在一个gygabyte中使用2 ^ 30个字节,如果你更喜欢定义为10,那么比例大致相同) ^ 9字节)`。

所以,一个大小为4e6, 436的矩阵(我假设你的矩阵大小的上限要大得多),假设每个float占用4个字节,大致需要6.48G 。这并不是什么疯狂的事情,你可以在使用load函数读取矩阵时找到这么多的连续内存,因为你的机器上有相当数量的RAM。我现在有8G,而rand(4*1e6,436)会分配所需的内存量,尽管最终会使用交换空间并减慢速度。我假设load本身会有一些开销,但如果你有16G的RAM(现在不是疯了),你可以安全地使用load

现在,如果您认为自己不会找到那么多连续的内存,我建议您将文件分成块,例如10矩阵,然后单独加载和转置它们。你如何做到这取决于你,取决于应用程序,以及数据中是否有任何稀疏模式。另外,请确保(如果您不需要额外的精度)使用单浮点精度。