Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 将单元格数组转换为数字数组转换的性能测试_Performance_Matlab_Cell Array - Fatal编程技术网

Performance 将单元格数组转换为数字数组转换的性能测试

Performance 将单元格数组转换为数字数组转换的性能测试,performance,matlab,cell-array,Performance,Matlab,Cell Array,单元格_仅为示例,但实际大小为300000 x 20。数据采用德语格式,即1,23=1.23(英语格式)。第一列是参数,从第二列开始到最后是数据。第一步是提取数据,然后用“.”替换“,”,然后将其转换为double进行信号处理 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

单元格_仅为示例,但实际大小为300000 x 20。数据采用德语格式,即1,23=1.23(英语格式)。第一列是参数,从第二列开始到最后是数据。第一步是提取数据,然后用“.”替换“,”,然后将其转换为double进行信号处理

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';}
然后在处理之后,我将数据转换回德语格式,将“.”替换为“,”

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

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

有几件事需要尝试,这取决于您对数据的了解程度。str2double在其核心使用sscanf,但进行了大量检查

如果您的数据良好,则在步骤1中创建一个匿名函数,使用sscanf跳过检查,一步完成替换和转换

% signal Processing...

Data_out = arrayfun(@(x) num2str(x),Data_in,'uni',0); % Step 2
Data_out = strrep(Data_out,',','.');
% Save data to file...
对于步骤2,有一个名为的未记录函数,它将从数字数组生成一个单元格数组,据说速度非常快

这可能会加快第2步的速度

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

有几件事需要尝试,这取决于您对数据的了解程度。str2double在其核心使用sscanf,但进行了大量检查

如果您的数据良好,则在步骤1中创建一个匿名函数,使用sscanf跳过检查,一步完成替换和转换

% signal Processing...

Data_out = arrayfun(@(x) num2str(x),Data_in,'uni',0); % Step 2
Data_out = strrep(Data_out,',','.');
% Save data to file...
对于步骤2,有一个名为的未记录函数,它将从数字数组生成一个单元格数组,据说速度非常快

这可能会加快第2步的速度

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

有几件事需要尝试,这取决于您对数据的了解程度。str2double在其核心使用sscanf,但进行了大量检查

如果您的数据良好,则在步骤1中创建一个匿名函数,使用sscanf跳过检查,一步完成替换和转换

% signal Processing...

Data_out = arrayfun(@(x) num2str(x),Data_in,'uni',0); % Step 2
Data_out = strrep(Data_out,',','.');
% Save data to file...
对于步骤2,有一个名为的未记录函数,它将从数字数组生成一个单元格数组,据说速度非常快

这可能会加快第2步的速度

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

有几件事需要尝试,这取决于您对数据的了解程度。str2double在其核心使用sscanf,但进行了大量检查

如果您的数据良好,则在步骤1中创建一个匿名函数,使用sscanf跳过检查,一步完成替换和转换

% signal Processing...

Data_out = arrayfun(@(x) num2str(x),Data_in,'uni',0); % Step 2
Data_out = strrep(Data_out,',','.');
% Save data to file...
对于步骤2,有一个名为的未记录函数,它将从数字数组生成一个单元格数组,据说速度非常快

这可能会加快第2步的速度

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

如何将数据保存在这个大型单元阵列中?您正在从磁盘读取文件吗?@daniel.wirtz是的,我从不同案例生成的磁盘读取文件。最终数据是日期、时间、数据和一些字符串的组合。好的,关于德语/英语转换,在导入matlab之前,在输入文件中查找/替换可能是最简单的;这为每次处理运行完全节省了时间(我假设您希望处理算法,因此随着时间的推移,“开销”也将变得昂贵。)否则,除非您有机会提供不同的输入格式(二进制等),否则您将无法绕过将字符串解析为数字的过程,而这将始终是昂贵的。下面@Adrian的解决方案也是我最好的猜测。你如何将数据保存在这个大单元阵列中?您正在从磁盘读取文件吗?@daniel.wirtz是的,我从不同案例生成的磁盘读取文件。最终数据是日期、时间、数据和一些字符串的组合。好的,关于德语/英语转换,在导入matlab之前,在输入文件中查找/替换可能是最简单的;这为每次处理运行完全节省了时间(我假设您希望处理算法,因此随着时间的推移,“开销”也将变得昂贵。)否则,除非您有机会提供不同的输入格式(二进制等),否则您将无法绕过将字符串解析为数字的过程,而这将始终是昂贵的。下面@Adrian的解决方案也是我最好的猜测。你如何将数据保存在这个大单元阵列中?您正在从磁盘读取文件吗?@daniel.wirtz是的,我从不同案例生成的磁盘读取文件。最终数据是日期、时间、数据和一些字符串的组合。好的,关于德语/英语转换,在导入matlab之前,在输入文件中查找/替换可能是最简单的;这为每次处理运行完全节省了时间(我假设您希望处理算法,因此随着时间的推移,“开销”也将变得昂贵。)否则,除非您有机会提供不同的输入格式(二进制等),否则您将无法绕过将字符串解析为数字的过程,而这将始终是昂贵的。下面@Adrian的解决方案也是我最好的猜测。你如何将数据保存在这个大单元阵列中?您正在从磁盘读取文件吗?@daniel.wirtz是的,我从不同案例生成的磁盘读取文件。最终数据是日期、时间、数据和一些字符串的组合。好的,关于德语/英语转换,在导入matlab之前,在输入文件中查找/替换可能是最简单的;这为每次处理运行完全节省了时间(我假设您希望处理算法,因此随着时间的推移,“开销”也将变得昂贵。)否则,除非您有机会提供不同的输入格式(二进制等),否则您将无法绕过将字符串解析为数字的过程,而这将始终是昂贵的。下面@Adrian的解决方案也是我最好的猜测。第二步是将程序速度提高15倍。在最后一步中,用逗号替换点,反之亦然。但第一个问题还是一样。我发现了一篇有趣的文章[sscanf和sprintf][1],并查看了对sscanf和sprintf的评论。