动态变量
请注意,虽然这是可能,它被认为是糟糕的编程(例如,请参见这里,或这个博客是洛伦写的甚至连他们的Mathworks文献资料告诉你不要这样做)。最好是直接将图像加载到3D数组或单元结构中,避免动态变量名称。为了完整起见,我刚刚发布了这篇文章;如果您碰巧必须使用此解决方案,您应该立即更改为(cell-)数组。
链接文章的要点是为什么eval就是这样一个坏主意,就是MATLAB不能再预测操作的结果了。例如A=3*(2:4)被matlab识别为输出双数组。如果你eval东西,MATLAB不能再这样做了。MATLAB是一种解释语言,即每一行代码都被读取然后运行,而不需要预先编译整个代码。这意味着每次matlab遇到eval,它必须停止,计算表达式,然后检查输出,存储它,并继续。大多数由matlab使用的速度引擎(jit/magma等)在没有预测语句结果的情况下无法工作,因此在eval计算,使代码呈现得非常慢。
同时,在使用eval..考虑以下几点:var1=1;var2=2;var3=3;varnames={'var1','var2; disp(''GOTCHA''); %', 'var3'};accumvar=[];for k=1:numel(varnames)
vname=varnames{k};
disp(['Reading from variable named ' vname]); eval(['accumvar(end+1)=' vname ';']);end
现在accumvar将包含所