b = cellfun(@eval,a);
将创建一个数组
b
与单元格数组大小相同
a
,使用每个值计算单元数组中相应字符串的值。
a = {};
a{1,1} = '0.55';
a{2,1} = '0.25 + 0.50';
a=repmat(a,1000,20); %Make it big for performance evaluation
tic
b1 = cellfun(@eval,a);
toc %0.662187 seconds
另一种选择是生成一个大字符串表达式,以便
eval
由于
cellfun
内部回路。这不如单元数组中的异常值安全。
一
可能会导致代码崩溃,而它可能只是
南
在上面的代码中。
tic
% add a comma separator after each value
strCell = cellfun(@(x) [x ','],transpose(a),'uniformoutput',false);
% add a semicolon separator at the end of each row
strCell(end,:) = cellfun(@(x) [x(1:end-1) ';'], strCell(end,:), 'uniformoutput',false);
% remove the last separator
strCell{end}=strCell{end}(1,end-1);
% evaluate the line
b2=eval(['[' strCell{:} ']']);
toc %0.313738 seconds but sometimes more than 1 seconds