用于将单元阵列转换为数字阵列转换的性能测试

时间:2015-02-03 08:37:08

标签: performance matlab cell-array

Cell_in = {'a' '2,34' '3,45' '5,342';
           'b' '3,4' '5,5' '5,2';
           'c' '4' '3,9' '4,3';
           'd' '4,5' '5,7' '6,12';}

Cell_in只是一个例子,但实际上大小是300000 x 20.数据是德国格式,即1,23 = 1.23(英文格式)。第一列是参数,从第二列开始直到结束为数据。第一步是提取数据然后我替换','用'。' ,然后将其转换为双倍信号处理。

Data_in = cell_in(:,2:end);
Data_in = strrep(Data_in,',','.');
Data_in = str2double(Data_in); % Step 1

然后在处理之后,我将数据转换回德语格式,取代'。'与','

% signal Processing...

Data_out = arrayfun(@(x) num2str(x),Data_in,'uni',0); % Step 2
Data_out = strrep(Data_out,',','.');
% Save data to file...

步骤1和2的执行时间太长。有没有更好的方法来提高绩效?

1 个答案:

答案 0 :(得分:3)

要尝试的几件事情,这取决于您对数据的了解程度。 str2double它的核心使用sscanf,但做了很多检查。

如果你的数据是好的,那么对于第1步,创建一个匿名函数,使用sscanf一步完成替换和转换,以跳过检查。

myStr2num = @(x) sscanf(strrep(x{1},',','.'),'%f'); 
Data_in = arrayfun(myStr2num ,Cell_in(:,2:end));

对于第2步,有一个名为sprintfc的未记录函数,它将从数字数组生成一个单元数组,据说非常快。

这可能会为您加速第2步。

Data_out = sprintfc('%g',Data_in);
Data_out = strrep(Data_out,',','.');