Matlab变量永远保存

时间:2012-11-29 07:07:27

标签: matlab

我有一个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,它运行得很好。不过,我不想在将来这样做。 Workspace contents

使用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

2 个答案:

答案 0 :(得分:0)

如果你正在做一些自定义文件保存,有点不清楚。如果它是第一个,我猜你有一个非常缓慢的保存循环,可能是一些硬件问题。尝试使用MATLAB的save函数保存数据:

tic
save('test.mat', 'AllData')
toc

如果工作正常,请尝试从那里开始工作,例如一次保存一个元素等。

您可以使用profiler对代码进行概要分析,使用命令profile viewer打开它,然后在输入文本字段中输入要分析的代码,脚本或函数。

答案 1 :(得分:0)

这不是一个很好的答案,但似乎问题是我在将图像转换为单个版本后保存了我的图像版本。我不知道为什么这会导致如此剧烈的放缓(在删除这行代码之后立即工作)所以如果有人可以编辑我的答案以更好地了解情况,那将不胜感激。