LaN*_*Neu 0 variables matlab loops
我是MATLAB的新手并尝试在循环中运行循环.ID例如,我事先定义了一个变量ID={'100'}.在我的循环中,然后我想转到ID的目录,然后在那里加载matfile.但是,每当我加载matfile时,突然ID定义会被所有可能的ID(目录中ID 100所有的所有文件夹)覆盖.这是我的代码 - 我也试过fullfile,但到目前为止没有运气:
ID={'100'}
for subno=1:length(ID) % first loop
try
for sessno=1:length(Session) % second loop, for each ID there are two sessions
subj_name = ([ID{subno} '_' Session{sessno} '_vectors_SC.mat']);
cd(['C:\' ID{subno} '\' Session{sessno}]);
load(subj_vec_name) % the problem occurs here, when loading, not before
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后,当我检查ID的长度时,它现在不是1(一个ID,即100),但是目录中的所有可能ID都是100,并且循环再次针对所有其他可能的ID进行迭代(尽管它应该在ID 100之后停止).
您应始终指定输出以load防止在工作区中覆盖变量并使用文件的所有内容污染工作区.在这里没有做到这一点的一些奇怪的潜在副作用有广泛的讨论 .
有可能,你有一个ID在.mat文件中命名的变量,它会ID在工作区中覆盖变量.使用输出可以避免这种情况load.
输出load将包含一个可用于访问数据的结构.
data = load(subj_vec_name);
%// Access variables from file
id_from_file = data.ID;
%// Can still access ID from your workspace!
ID
Run Code Online (Sandbox Code Playgroud)
边注
更改目录以访问数据通常并不理想.这是因为如果用户运行您的脚本,他们可能会在他们想要的目录中启动,但是当您的程序返回时,它会将它们转储到意外的位置.
相反,您可以使用fullfile构建文件的路径而不必更改文件夹.这也允许您的代码在*nix和Windows系统上运行.
subj_name = ([ID{subno} '_' Session{sessno} '_vectors_SC.mat']);
%// Construct the file path
filepath = fullfile('C:', ID{subno}, Session{sessno}, subj_name);
%// Load the data without changing directories
data = load(filepath);
Run Code Online (Sandbox Code Playgroud)