重要更新
我刚刚发现在重新启动 Matlab 和计算机后,这个简化的代码也不再为我重现问题......我很抱歉占用你的时间来处理一个不起作用的脚本。但是,如果我在内部“for”循环中的任何文件夹(我尝试过)中保存任何内容,旧问题仍然存在于我的原始脚本中。出于我的目的,我已经解决了这个问题,除非我绝对需要它,否则根本不进行保存。for
原始脚本在循环和使用save
or方面具有以下结构load
:
load() % .mat files, size 365x92x240
for day = 1:365
load() % .mat files, size 8x92x240
for type = 1:17
load() % .mat files size 17x92x240
load() % .mat files size 92x240
for step 1:8
%only calculations
end
save() % .mat files size 8x92x240
end
save() % .mat files, size 8x92x240
end
% the load and saves outside the are in for loops too, but do not seem to affect the described behavior in the above script
load() % .mat files size 8x92x240
save() % .mat files size 2920x92x240
load()
save() % .mat files size 365x92x240
load()
save() % .mat files size 12x92x240
如果完全运行,脚本将节省大约。10 Gb,负载约。2Gb 数据。
整个脚本相当冗长,并且进行了大量的保存和加载。不幸的是,在我设法以简化版本重现问题之前,在这里分享所有内容是相当不切实际的。当我沮丧地发现,相同的代码有时会表现出不同的行为时,它立即变得比预期的更乏味,因为要找到一个始终如一地重现该行为的简化。一旦我确定产生问题的可管理代码,我会尽快回来。
以前的问题描述(注意。下面的代码不能确定重现所描述的问题。):
我刚刚了解到,在 Matlab 中,如果不减慢下一轮循环中的数据加载速度,就不能在循环中将保存文件夹命名为temp 。for
我的问题是为什么?
如果您有兴趣自己重现问题,请参阅下面的代码。要运行它,您还需要加载一个名为anyData.mat的 matfile和两个用于保存的文件夹,一个名为temp,另一个名为temporary。
clear all;clc;close all;profile off;
profile on
tT= zeros(1,endDay+1);
tTD= zeros(1,endDay+1);
for day = 0:2;
tic
T = importdata('anyData.mat')
tT(day+1)=toc; %loading time in seconds
tic
TD = importdata('anyData.mat')
tTD(day+1)=toc;
for type = 0:1
saveFile = ones(92,240);
save('AnyFolder\temporary\saveFile.mat', 'saveFile') % leads to fast data loading
%save('AnyFolder\temp\saveFile.mat', 'saveFile') %leads to slow data loading
end % end of type
end% end of day
profile off
profile report
plot(tT)
您将在绘图的 y 轴上看到,当您在稍后的for
循环中保存到temp而不是临时时,数据加载需要更长的时间。有没有人知道为什么会发生这种情况?