Why is str2double so slow in matlab as compared to a mex-function?
我的问题是标题。
与在C / C中制作的mex函数相比,为什么str2double在matlab中这么慢? Matlab是否不具有良好的字符串处理功能?
任何人都可以给我一些事实原因,以了解为什么mex函数运行得快那么多个数量级?我希望对这种差异进行运行时分析,但我对matlab的代码没有任何具体原因。
您能告诉我如何打开文件并实际查看为内置的matlab str2double函数编写的代码吗?
有关以下主题的一些帖子:
http://www.mathworks.com/matlabcentral/fileexchange/28893-fast-string-to-double-conversion
当他们尝试解释此功能如何更快运行时,我不理解张贴者的含义。例如,这是什么意思:(str2doubleq是用c编写的mex函数)
" str2doubleq利用mex网关使用c快速字符串处理功能和std :: stringstream属性。该转换使用与boost :: lexical_cast相同的思想。"
没有人能回答这个问题吗?
看一下函数,我猜是在循环内调用b / c
1 | d = reshape(sscanf(sprintf('%s#', c{:}), '%g#'), size(c)); |
对于单元格数组,这实际上比
1)str2double是一个非常复杂的函数,可以转换许多不同的格式。我想您的mex实施要简单得多,这可以解释为什么它更快。 Matlab帮助中提供了Som示例:
1 2 3 4 5 6 | str2double('123.45e7') str2double('123 + 45i') str2double('3.14159') str2double('2.7i - 3.14') str2double({'2.71' '3.1415'}) str2double('1,200.34') |
2)为什么混合速度更快?因为当您执行标准的m文件脚本时,基本上会有一个程序读取该程序并执行(解释器)。因此有两层。但是,在编写mex文件时,可以直接用CPU语言对其进行编译,以便可以由处理器直接运行它。只有一层,所以速度更快。有关更多详细信息,请参见维基百科文章:
http://en.wikipedia.org/wiki/Interpreted_language
http://en.wikipedia.org/wiki/Compiled_language
3)您看不到str2double的代码,因为它已编译。 Matworks不提供此功能的代码。您可以执行它,但不能阅读它。所有内置函数都相同。