代码之家  ›  专栏  ›  技术社区  ›  WJA

matlab中数值数组表达式的单元

  •  1
  • WJA  · 技术社区  · 6 年前

    我有一个带有数学表达式的单元格,我想将其转换为数值数组。如下所示:

    a = {};
    a{1,1} = '0.55';
    a{2,1} = '0.25 + 0.50';
    

    现在我想收到结果(但最好没有for循环):

    b(1) = 0.55;
    b(2) = 0.75;
    

    我怎样才能有效地做到这一点?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Brice    6 年前

    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