Why is str2double so slow in matlab as compared to a mex-function?

删除回忆录丶 提交于 2019-12-01 10:11:32

1) str2double is a pretty complex function that can convert many different formats. I guess that your mex implementation is much simpler and that can explain why it's faster. Som examples are provided in matlab help:

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

2) why mex are faster? Because when you execute a standard m-file script, basically there is a program that will read your program an execute it (an interpreter). So there are two layers. However, when you write a mex-file, you compile it directly in the CPU language, such that it can be run directly by the processor. There is only one layer, so it's faster. For more details, see the wikipedia article:

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

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

3) You cannot see the code of str2double because it is compiled. Matworks does not provide the code of this function. You can execute it, but not read it. This is the same for all built-in functions.

The implementation of str2double is not hidden from you. To see it, type edit str2doulbe.m. You can also run the profiler on your code to see where in the function all the time is being spent.

Looking at the function, my guess is that it is slow b/c sscanf is being called inside a loop. One of the commenters in the fileexchange link you posted suggested using the following code to take advantage of sscanf being vectorized:

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

This is actually much faster than str2double for a cell array.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!