2012-08-02 23 views
2

假设我正在使用MATLAB IDE,并碰巧在我的工作区中有一些非常大的对象(例如500k +元素的数组)。现在,假设我愚蠢地,偶然地双击其中一个非常大的变量,这会触发对数组编辑器的加载。不幸的是,对于这样大的数组,MATLAB只是挂起了。如何在显示非常大的数组时挂起MATLAB IDE?

我试过CTRL + C,CTRL + BREAK,CTRL + D,但似乎都没有能够中断IDE的行为。我知道我可以强制matlab退出,但首先将所有这些变量读入工作区需要很多时间,并且我可能在编辑器窗口中未保存更改等。

+0

使用命令行matlab,所以你不能点击矩阵:p – 2012-08-02 14:42:37

+1

是的,我想行为修改将是有用的,但我喜欢IDE – 2012-08-02 14:45:21

回答

2

我找到了一种方法,但它不是最好的,它需要路径的变化和回一次得到一个处理原始openvar

function openvar(name,array) 
    persistent org_openvar 
    if isempty(org_openvar) 
     curdir=pwd; 
     cd(fullfile(matlabroot,'toolbox/matlab/codetools')); 
     org_openvar = @openvar; 
     cd(curdir); 
    end 

    if numel(array)>1e5 
     if strcmp(questdlg(sprintf('Opening ''%s'' which has %d elements.\n\nAre you sure? This is gonna take a while!',name,numel(array)), ... 
     'Variable editor','Yes','Cancel','Cancel') , 'Yes') 
       org_openvar(name,array) 
      end 
    else 
     org_openvar(name,array) 
    end 
end 

获得该手柄是最大的问题,称这是正好。如果openvar将建在,你可以使用函数builtin

builtin('openvar',name,array) 

但这是不幸的是没有的情况下:(
str2func与完整路径组合也不起作用,至少我不t得到它的工作...

+1

我添加这些链接以供将来参考:http://stackoverflow.com/questions/6408759/avoid-matlab-startup-warning-when-overloading-buildin-functions 和http://stackoverflow.com/questions/6201272 /如何避免-matlab-crash-when-opening-too-many-figures具有相同的解决方案,尽管它是用于构建函数的 – 2012-08-03 09:26:10

+2

最后去测试你的解决方案。干得不错!我提出了一个小的编辑方式,以便在第五行中使用无斜杠构建完整文件,否则在Linux系统(我测试它)时无法使用。这一定会为我节省一些丢失的matlab会话! – 2012-08-28 14:57:54

+1

@DanielKessler你是对的,我曾看过'fullfile'并注意到'f = strrep(f,'/','\');'在底部打电话,但从此我只记得有一个strrep,而不是那行只能修复从unix到pc的东西。谢谢你让我解决这个问题!我非常依赖'fullfile'来处理这些事情,并且同时使用unix和windows:p(看起来你的编辑被错误地拒绝了,我自己修复了) – 2012-09-05 20:36:54

5

变量编辑器已启动使用命令openvar。为了解决你的问题,你可以利用Matlab的怪癖,导致函数被同名变量掩盖。例如,如果您创建名为plot的变量,则plot()函数将停止工作。

该解决方案尽管很简单,但只是简单地创建一个名为openvar的空变量。然后,随时尝试打开变量编辑器将失败,因为变量隐藏了函数openvar

如果要再次使用变量编辑器,请简单地调用clear openvar删除该变量,并且该函数将被取消屏蔽。

+0

所以这个想法是基本上让它首先打开变量编辑器变得更加困难,从而避免了一次双击就会导致崩溃?巧妙的方法:),为我工作。 – 2012-08-02 14:44:29

+7

为什么不写另一个openvar函数(你自己的)来封装真正的openvar函数。通过这种方式,您可以在那里为大矩阵添加支票,并询问用户“您确定吗?这会花费一段时间!” – 2012-08-02 14:44:33

+0

@GuntherStruyf +1 – slayton 2012-08-02 14:46:58