我有一个3x6单元阵列的MATLAB变量。单元阵列中的一列保持最多150-200个小RGB图像,例如16×20像素大小(再次,最多)。其余的列是:
相同数量的3或4个字符串的标签,
图像蒙版,大约350x200
3个整数
出于某种原因,保存此对象需要很长时间,或者至少是对象的大小。它已经有10分钟了(这还不错,但我计划扩大对象的大小以容纳数千个小图像)并且MATLAB似乎没有取得任何进展。实际上,当我打开变量的包含目录时,它的大小在0字节到大约120kB之间循环。 (即它将以30或40 kB的步长增加到120,然后重新启动)。
这是正常行为吗? MATLAB变量总是需要很长时间才能保存吗?这是怎么回事?
错误:我正在保存AllData
,而不是我的SVM变量。 AllData
与SVM管理器具有相同的数据,减去实际的SVM本身和一个整数。
代码的哪些特定点有助于展示解决此问题?代码本身是几百行,并在几个函数中分解。对此进行故障排除有什么重要意义?创建变量时?什么时候保存?我创建较小图像的方式?
讨厌成为桌面照片的菜鸟。但是我正在使用的机器在截取屏幕时遇到了问题。无论如何,这里是
Alldata/curdata
只是3x7数组的子集...实际上它是3x8,但最后一个只是int
。
有趣的一点:我打断了保存过程,变量似乎保存得很好。我在保存的数据上训练了一个新的svm
,它运行得很好。不过,我不想在将来这样做。
使用whos:
Name Size Bytes Class Attributes
AllData 3x6 473300 cell
Image 240x352x3 253440 uint8
RESTOREDEFAULTPATH_EXECUTED 1x1 1 logical
SVMKeeper 3x8 2355638 cell
ans 3x6 892410 cell
curData 3x6 473300 cell
dirpath 1x67 134 char
im 240x352x3 1013760 single
s 1x1 892586 struct
更新: 1.这总是发生,还是只做过一次?
- 总是会发生
2.将它保存到其他(本地)驱动器时,是否需要同一时间?
- 当我回到那台电脑时,我会对此进行更多调查
3.将500kb矩阵保存到该文件夹需要多长时间?
- 几乎瞬间
4.如上所述,您使用的函数调用是什么?
-Code在下面添加
(Image is a rgb image)
MaskedImage(:,:,1)=Image(:,:,1).*Mask;
MaskedImage(:,:,2)=Image(:,:,2).*Mask;
MaskedImage(:,:,3)=Image(:,:,3).*Mask;
MaskedImage=im2single(MaskedImage);
....
(I use some method to create a bounding box around my 16x20 image)
(this is in a loop of that occurs about 100-200 times)
Misfire=input('is this a misfire?','s');
if (strcmpi(Misfire,'yes'))
curImageReal=MaskedImage(j:j+Ybound,i:i+Xbound,:);
Training{curTrainingIndex}=curImageReal; %Training is a cell array of images
Labels{curTrainingIndex}='ncr';
curTrainingIndex=curTrainingIndex+1;
end
(the loop ends)...
SaveAndUpdate=input('Would you like to save this data?(say yes,definitely)','s');
undecided=1;
while(undecided)
if(strcmpi(SaveAndUpdate,'yes,definitely'))
AllData{curSVM,4}=Training;
AllData{curSVM,5}=Labels;
save(strcat(dirpath,'/',TrainingName),'AllData'); <---STUCK HERE
undecided=0;
else
DontSave=input('Im not going to save. Say YESNOSAVE to NOT SAVE','s')
if(strcmpi(DontSave,'yesnosave'))
undecided=0;
else
SaveAndUpdate=input('So... save? (say yes,definitely)','s');
end
end
end
答案 0 :(得分:0)
如果你正在做一些自定义文件保存,有点不清楚。如果它是第一个,我猜你有一个非常缓慢的保存循环,可能是一些硬件问题。尝试使用MATLAB的save
函数保存数据:
tic
save('test.mat', 'AllData')
toc
如果工作正常,请尝试从那里开始工作,例如一次保存一个元素等。
您可以使用profiler
对代码进行概要分析,使用命令profile viewer
打开它,然后在输入文本字段中输入要分析的代码,脚本或函数。
答案 1 :(得分:0)
这不是一个很好的答案,但似乎问题是我在将图像转换为单个版本后保存了我的图像版本。我不知道为什么这会导致如此剧烈的放缓(在删除这行代码之后立即工作)所以如果有人可以编辑我的答案以更好地了解情况,那将不胜感激。