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的执行时间太长。有没有更好的方法来提高绩效?
答案 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,',','.');