2011-12-02 76 views
2

我的问题是标题。与mex函数相比,为什么matlab中的str2double非常慢?

  1. 为什么str2double在matlab中比在C/C++中制作的mex函数慢得多? matlab是否没有良好的字符串处理能力?

  2. 谁能给我一些事实理由,为什么一个MEX函数运行幅度的这么多订单更快?我希望对这种差异做一个运行时间分析,但是我没有任何matlab代码的具体原因。

  3. 你能向我解释,我怎么会开到文件,实际上看的内置MATLAB str2double功能编写的代码?

的话题有些贴子:

http://www.mathworks.com/matlabcentral/fileexchange/28893-fast-string-to-double-conversion

我不明白的海报意味着什么,当他们试图解释这功能更快速地运行。例如,这意味着什么:(str2doubleq是C++中的mex函数)

“str2doubleq利用mex-gateway使用C++快速字符串处理功能和std :: stringstream属性。在升压:: lexical_cast的”

没有人能回答这个用的?

回答

3

1)str2double是一个相当复杂的功能,它可以将许多不同的格式。我想你的mex实现更简单,这可以解释为什么它更快。索姆提供的例子在matlab帮助:

str2double('123.45e7') 
    str2double('123 + 45i') 
    str2double('3.14159') 
    str2double('2.7i - 3.14') 
    str2double({'2.71' '3.1415'}) 
    str2double('1,200.34') 

2)为什么mex更快?因为当你执行一个标准的m文件脚本时,基本上有一个程序会读你的程序并执行它(解释器)。所以有两层。但是,当您编写mex文件时,您可以直接使用CPU语言编译它,以便它可以由处理器直接运行。只有一层,所以速度更快。有关详细信息,请参阅Wikipedia文章:

http://en.wikipedia.org/wiki/Interpreted_language

http://en.wikipedia.org/wiki/Compiled_language

3)你看不到的str2double的代码,因为它被编译。 Matworks不提供此功能的代码。你可以执行它,但不能读取它。所有内置函数都是一样的。

+0

但是,编译时间并不会导致它运行缓慢,而是数据集的大小。你的第一个解释似乎是相关的,但唯一失去的功能是程序不能解释复数。另一方面,它有一些附加的功能,所以这两个将取消。也许这是因为matlab将字符串存储为向量,这是一种效率低下的方法吗? – NONE

8

str2double执行不向你隐藏。要查看它,请键入edit str2doulbe.m。你也可以在你的代码上运行profiler来查看函数中的所有时间。

综观功能,我的猜测是,它是缓慢的B/C sscanf被称为一个循环中。一个在您发布使用下面的代码建议利用sscanf的fileexchange链接评论者正在向量化:

d = reshape(sscanf(sprintf('%s#', c{:}), '%g#'), size(c)); 

这实际上比str2double一个单元阵列快得多。

+0

感谢您的快捷方式。我不需要文本解析的灵活性。这削减了我的整体运行时间大约一半。工作很好。 – EngrStudent

相关问题