Matlab大型ASCII数据,带文本扫描,产生多GB的变量

Matlab大型ASCII数据,带文本扫描,产生多GB的变量,matlab,Matlab,我有几个ASCII格式的测试数据文件,大小从100MB到600MB不等。两个问题(或者可能是一个掩盖了另一个): 根据我的研究,文本扫描似乎占用了物理内存。如果我试图加载任何超过200 MB的文件(我的电脑中有16 GB的物理内存),我的电脑就会完全冻结 今天我发现,一旦我成功避免了电脑冻结并加载了190 MB的数据文件,当我whos-ed导入变量时,它显示变量大小为7.4 GB。事实上,即使在导入完成后,物理内存仍保持在接近冰点的90% 我尝试了以下方法: data = struct; cou

我有几个ASCII格式的测试数据文件,大小从100MB到600MB不等。两个问题(或者可能是一个掩盖了另一个):

  • 根据我的研究,文本扫描似乎占用了物理内存。如果我试图加载任何超过200 MB的文件(我的电脑中有16 GB的物理内存),我的电脑就会完全冻结
  • 今天我发现,一旦我成功避免了电脑冻结并加载了190 MB的数据文件,当我
    whos
    -ed导入变量时,它显示变量大小为7.4 GB。事实上,即使在导入完成后,物理内存仍保持在接近冰点的90%
  • 我尝试了以下方法:

    data = struct;
    count = 0;
    while ~feof(fid)
        count = count+1;
        data_temp = textscan(fid, format, 100000, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true,...
            'EmptyValue' ,NaN, 'ReturnOnError', false);
       data(count).blocks = data_temp;
       clear data_temp
    end
    

    但这似乎没有什么帮助(也要考虑行数)。我尝试了一种没有结构的类似方法,但仅仅依靠
    textscan
    指针。差别不大。

    您的数据真的有100000列宽吗?如果不是,那么重复列数的
    textscan
    的输出是否总是那么大?这可以解释大内存需求。也来看看。最新的MATLAB版本(R2016b)可以处理数十亿行数据,这可能正是您所需要的。哦,太好了。我有2016b,但由于图形原因,2015b是我的默认值。我要试一试。我以为行数是指行数。我遇到的最大列长度是几千行,行可能是一百万行左右。但正如我所说,我使用的数字低至50,与上面显示的数字相比,差别不大。使用(在R2014b中引入)或(在R2016a中引入)来处理文件,而不实际一次加载所有数据(无法装入内存)。这些数据存储只加载您需要的部分,或者加载适合内存的文件块,以便对所有数据执行计算。让我们知道这是否是您正在寻找的,以及它是否适用于您的数据!