【问题标题】:How to load and run multiple .mat files in matlab如何在 matlab 中加载和运行多个 .mat 文件
【发布时间】:2021-07-04 14:59:17
【问题描述】:

我正在尝试在 matlab 中运行多个 .mat 文件。到目前为止,我有 3 个 .mat 文件,每个文件都包含相同的变量。我想运行一个 .mat 文件,然后切换到下一个文件。它们是这样命名的:

        file2019_1.mat %day 1
        file2019_2.mat %day 2
        file2019_3.mat %day 3

我尝试运行的代码适用于第一个 .mat 文件,然后它不会切换到第二个。理想情况下,我会尝试连续运行所有 3 个文件,因为将来我可能有 100 个。

这是我目前尝试的代码:

        % set up folder for .mat files containing variables of interest 
        myFolder = ('filepath');
        filePattern = fullfile(myFolder, 'file2019_*.mat');
        fileList = dir(filePattern);

        % set up variable data (here it is daily mean velocity value) 
        % hourly, m/s (one mat file one day)
        number_mat = length(fileList);
        for i = 1:number_mat
        load(['file2019_' num2str(i) '.mat'])

        %%%% run model in here

        end 

任何关于我如何让它在每个 mat 文件中连续运行的帮助都会很棒。 谢谢。

【问题讨论】:

  • 不确定可能是什么问题,但这里是阅读.mat 文件的简明方式:GitHub Gist: A MATLAB Script for Loading MAT files from folders。我能看到的唯一可能导致问题的是将文件夹连接到正在加载的文件。
  • @MichaelTr7 谢谢你,我试过你的代码,但是当它应该切换到第二个 .mat 文件时它仍然停止。我的模型正在跟踪粒子,并且有一个时间戳,所以不确定这是否是问题所在,或者它完全重新启动,因为现在我的错误与数组的大小有关。
  • 可能是数组大小的问题。我认为您的.mat 文件加载非常好。这可能与 for 循环中的代码有关。随时通过editing问题添加任何代码、错误或问题。

标签: matlab loops mat-file


【解决方案1】:

一个非常简单的方法,只需选择所有文件(Ctrl + A) - 将它们拖放到命令窗口中(确保拖动第一个文件以相同顺序加载它们)。

或者你可以使用这个

% Read files mat1.mat through mat20.mat
for k = 1 : 20  % or whatever your numbers of files
    % Create a mat filename, and load it into a structure called matData.
    matFileName = sprintf('mat%d.mat', k);
    if isfile(matFileName)
        matData = load(matFileName);
    else
        fprintf('File %s does not exist.\n', matFileName);
    end
    
end

或者

% Get a list of all txt files in the current folder, or subfolders of it.

fds = fileDatastore('*.txt', 'ReadFcn', @importdata)

fullFileNames = fds.Files

numFiles = length(fullFileNames)

% Loop over all files reading them in and plotting them.

for k = 1 : numFiles

    fprintf('Now reading file %s\n', fullFileNames{k});

    % Now have code to read in the data using whatever function you want.

    % Now put code to plot the data or process it however you want...

end

【讨论】:

  • 我需要它遍历每个变量,因为它们具有相同的变量名称,最终我将拥有很多文件,因此为了节省内存,我不想一次将所有变量保留在环境中
  • 我编辑了答案,希望我能理解你。
  • 请注意,您可以使用 mat%d.mat,而不是 file2019_%d.mat
猜你喜欢
  • 2012-01-02
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多