相关疑难解决方法(0)

MATLAB性能基准测试

设置:

这篇文章是关于测试以下问题的解决方案的性能:

S给出了格式为由下划线分隔的数字的字符串的单元格数组,例如:

        list_of_words = repmat({'02_04_04_52_23_14_54_672_0'},10,1);

保证所有字符串:

  1. 它们只包含十进制数字和下划线;
  2. 下划线的数量是相同的;
  3. 没有两个连续的下划线.

编写MATLAB代码,将字符串的单元格数组转换为数字矩阵S× M双精度数(值小1000倍),其中S是字符串M数,是字符串中的数字数.

StackOverflow上发布了一个非常类似的问题,提出了几个解决方案.最初的目标是提高速度性能.

代码:

为速度而设计的两个解决方案似乎从一个MATLAB安装到另一个,甚至从一个运行到另一个运行的性能差异很大.此外,它们具有非常不同的实现样式.

在黑暗的角落,你会发现一个违背 MATLAB最神圣的原则的解决方案:eval是邪恶的,应该不惜一切代价避免循环.但是,代码尝试通过避免重复的内存分配,使用快速将字符串转换为数字以及执行就地操作来优化速度:

%'eval_and_loops_solution.m'
function array_of_numbers = eval_and_loops_solution(list_of_words)

        n_numbers = 1 + sum(list_of_words{1}=='_');
        n_words   = numel(list_of_words);

        array_of_numbers = zeros(n_numbers, n_words);

        for k = 1:n_words
                temp = ['[', list_of_words{k}, ']'];
                temp(temp=='_') = ';';
                array_of_numbers(:,k) = eval(temp);
        end;

         %'this is a waste of memory, but is kind of required'
        array_of_numbers = transpose(array_of_numbers / …
Run Code Online (Sandbox Code Playgroud)

optimization performance matlab

17
推荐指数
3
解决办法
1245
查看次数

标签 统计

matlab ×1

optimization ×1

performance ×1