matlab - 带有表达式的单元格到matlab中的数值数组
问题描述
我有一个带有数学表达式的单元格,我想将其转换为数值数组。它看起来如下:
a = {};
a{1,1} = '0.55';
a{2,1} = '0.25 + 0.50';
现在我想收到结果(但最好没有 for 循环):
b(1) = 0.55;
b(2) = 0.75;
我怎样才能有效地实现这一目标?
解决方案
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
这不太安全,因为元胞数组中的异常值a
可能会导致代码崩溃,而它可能只是在上面的代码中产生NaN。
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
推荐阅读
- python - 如何创建具有共享权重的两个层,其中一个是另一个的转置?
- wordpress - 站点问题调试设置为 true
- extjs - Ext.js - 是否可以通过开放工具和 ext.js 7 使用 es6 类语法
- python - 识别在 selenium python 中使用 AngularJS 开发的元素
- jquery - 添加到 SVG 地图
- graphql - 如何使用 IoC 访问 HotChocolate (GraphQL) 请求的查询
- python - "notebook==6.0.2 cannot be installed on this environment" on python 3.5 environment
- sql - SQL查询遍历记录列表并插入缺失
- ruby-on-rails - 更新运输重量和包装以更准确,因为我当前的重量和包装不反映现实
- internet-explorer-11 - Google Tag Manager Preview 在 IE11 中不起作用