【问题标题】:MATLAB - autocorrelation of a huge amount of valuesMATLAB - 大量值的自相关
【发布时间】:2017-11-11 11:56:08
【问题描述】:

我有一个包含大量值的 txt 文件(约 400 万个值,上述 txt 文件的每一行都有一个值),我想使用 MATLAB 函数autocorr 来计算上述一系列值的自相关。

我的问题是 MATLAB 不允许我创建包含所需元素数量的向量,而是将向量大小限制为大约 25000 个元素(在 64 位操作系统上)。

什么是一个聪明的方法?非常感谢!

【问题讨论】:

  • 我认为在今天的任何一台电脑中生成包含 400 万个条目的向量都应该存在问题。 double 值需要 64 位或 8 字节,因此您大约需要 8*4 = 24 MB 的 RAM。

标签: matlab


【解决方案1】:

最简单的方法可能是将文件数据分成块,计算每个块的自相关,然后聚合结果。

对此稍作扩展,您还可以使用移动窗口而不是离散块(例如:观察 1-30,然后 2-31,然后 3-32,...)。

但是,让我们暂时坚持第一种方法。这是一个允许您指定块长度然后读取文件块的函数:

function res = readFileChunks(file,chunkSize)
    fid = fopen(file,'r');

    if (fid < 0)
        error('Cannot open file "%s".',file);
    end

    res = {};

    while (~feof(fid))
        res{end+1} = fscanf(fid,'%f',[1 chunkSize])';
    end

    fclose(fid);
end

例子:

res = readFileChunks('data.txt',2500);

现在,您所要做的就是清理您的结果(例如,清除由空文件行引起的空单元格)并将您的自相关处理为每个向量的循环。

由于 Matlab 循环非常昂贵,您还可以将自相关值直接计算到读取文件块的循环中。这样您将直接收到最终结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多