重要更新
我刚刚发现,在重新启动Matlab和计算机后,这个简化的代码不再为我重现问题......我很抱歉花时间使用不起作用的脚本.但是,如果我在内部'for'循环中的任何文件夹(我已经尝试过)中保存了任何内容,那么旧问题仍然存在于我的原始脚本中.就我的目的而言,除非我绝对需要,否则我只是不做这个保存.原来的剧本在的方面如下结构for的循环和使用save或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
Run Code Online (Sandbox Code Playgroud)
如果完整运行,脚本将保存约.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)
Run Code Online (Sandbox Code Playgroud)
您将在图表的y轴上看到,当您在后面的for循环中保存到临时而不是临时时,数据加载会花费更长的时间.那里有谁知道为什么会这样?
这里有两件事
如果您正在进行图像处理操作并且有多个图像,则由于 MATLAB 可用的速度、缓存和当前内存,写入硬盘可能会遇到瓶颈。