【问题标题】:How can I read multiple .mat files from 5 different folders which are stored in my main folder如何从存储在我的主文件夹中的 5 个不同文件夹中读取多个 .mat 文件
【发布时间】:2016-08-26 09:59:18
【问题描述】:

我有一个文件夹,其中包含 5 个不同的文件夹(每个文件夹有 10 个 .mat 文件),我想加载或读取 MATLAB 中的所有文件。你能给我一些提示或一些有用的信息我该怎么做?

每个.mat 文件包含 30000x6 矩阵,我还需要从每个文件中存储一个列向量并将其保存在一个单独的矩阵中。 我需要这个矩阵用于 PCA。

感谢任何帮助。

【问题讨论】:

  • 它们是 .m 文件还是 .mat 文件?通常 .m 保存代码, .mat 保存数据,但你是说你有 .m 和数据。
  • @Brick Ya 抱歉,它们是 .mat 文件。所有文件都包含大量阅读内容。它们存储在一个 3000*6 的矩阵中。
  • @Brick ya 它们是 .mat 文件
  • ,粗体 text 使 文本非常烦人 阅读。我删除了它,如果您更喜欢原始格式,请回滚。
  • 那么在每个文件上调用load 有什么问题?

标签: matlab matrix vector data-analysis


【解决方案1】:

首先,您需要发现主文件夹中的文件夹(假设它被命名为main_folder)。你可以使用dir 命令来做到这一点,它会返回一个具有几个有趣特性的结构:

dirContents = dir('main_folder')

输出

dirContents = 

9x1 struct array with fields:

    name
    date
    bytes
    isdir
    datenum

遍历结果以查找 isdir 字段设置为 1 的条目(注意 ...)。如果您还想在嵌套文件夹中搜索,请递归应用此过程。

对于每个条目,获取具有所需扩展名的文件。您可以将dir 再次与通配符一起使用:

% Loop over the directories inside 'main_folder'
for indDir = 1:numel(dirContents)
    thisEntry = dirContents{indDir};
    if thisEntry.isdir
        % If entry is a directory, search .mat files
        matFilesInFolder = dir(['main_folder/',thisEntry.name,'/*.mat']);
        % For each found .mat file, load contents
        for indMat = 1:numel(matFilesInFolder)
            thisMat = matFilesInFolder{indMat};
            matContents = load(['main_folder/',thisEntry.name,'/',thisMat.name]);

            % HERE DO WHATEVER YOU WANT WITH THE CONTENTS OF THE FILE
        end
    end
end

这是困难的部分。代码尚未经过测试,可能需要修复。

我不确定您需要如何处理数据。检查内容的加载方式并根据需要进行处理。

【讨论】:

  • 任何评论为什么这个解决方案值得反对?它回答了 AFAIK 的问题 :-(
  • “代码未经测试,可能需要修复”,手动连接而不是使用fullfile,当他发现复制粘贴你的代码无法满足他的“需要从每个文件中存储一个列向量并将其保存在一个单独的矩阵中”
  • 不知道fullfile,谢谢。无论如何,我不认为 stackoverflow 的目标是让代码准备好粘贴到您的项目中,这就是为什么我更喜欢向初学者提供未经深入测试的代码:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2020-03-31
相关资源
最近更新 更多