我有一个 3x6 元胞数组的 MATLAB 变量。单元阵列的其中一列最多可容纳 150-200 个小 RGB 图像,例如 16x20 像素大小(同样,最多)。其余列是:
相同数量的标签是 3 或 4 个字符的字符串,
一个图像蒙版,大约 350x200
3 个整数
由于某种原因,保存此对象需要很长时间,或者至少对于对象的大小而言。已经 10 分钟了(这还不算太糟糕,但我计划扩大对象的大小以容纳数千张这些小图像),而 MATLAB 似乎没有取得任何进展。事实上,当我打开变量的包含目录时,它的大小在 0 字节到大约 120kB 之间循环。(即它将以 30 或 40 kB 的步长增加到 120,然后重新启动)。
这是正常行为吗?MATLAB 变量是否总是需要很长时间才能保存?这里发生了什么?
错误:我正在保存AllData
,而不是我的 SVM 变量。AllData
具有与 SVM keeper 相同的数据,减去实际的 SVM 本身和一个整数。
代码的哪些特定点有助于解决这个问题?代码本身只有几百行,分成几个函数。解决此问题需要考虑哪些重要事项?什么时候创建变量?什么时候保存?我创建较小图像的方式?
讨厌成为给他们的桌面拍照的菜鸟。但是我正在使用的机器在截屏时遇到问题。无论如何,这里是
Alldata/curdata
只是 3x7 数组的子集...实际上它是 3x8,但最后一个只是int
.
有趣的一点:我中断了保存过程,变量似乎保存得很好。我在保存的数据上训练了一个新svm
的,它工作得很好。不过,我不想在未来这样做。
使用谁:
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.如上所述,您使用的函数调用是什么?
- 下面添加的代码
(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