我最近一直在使用MATLAB中的一些迭代算法,并且在涉及循环时,MATLAB的性能(或缺乏性能)受到了很大的打击。我知道在可能的情况下矢量化代码的好处,但是当你需要算法循环时,是否有任何优化工具?
我知道在C / C ++中编写小子程序的MEX文件选项,虽然考虑到我的算法,但考虑到所需的数据结构,这可能是一个非常痛苦的选择。我主要使用MATLAB来实现原型的简单性和速度,因此语法复杂的静态类型语言对我的情况并不理想。
还有其他建议吗?甚至其他语言(python?)也有相对无痛的矩阵工具。
答案 0 :(得分:4)
PROFILER是一个非常有用的工具,可以找到Matlab代码中的瓶颈。它当然不会改变你的代码,但有助于找到用矢量化或mex优化的函数/行。
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/profile.html
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_env/f9-17018.html
答案 1 :(得分:4)
曾经的确,矢量化会提高MATLAB代码的速度。但是,JIT-accelerator
在很大程度上已不再适用答案 2 :(得分:3)
您可能想要研究MATLAB的并行计算工具箱,如果您拥有合适的硬件,它可以产生很大的不同。我重新编写了大约12行代码,并为我们的一个循环密集型程序和八个核心PC加速了4-6倍。
答案 3 :(得分:3)
如果您有选择,请务必设置循环,以便逐列扫描数据,这是MATLAB中数据的排列方式。另外,确保在循环之前预先分配任何输出数组并将其索引到它们中,而不是在for循环中增长数组。
答案 4 :(得分:3)
如果您可以转换代码以便在整个矩阵上调用您的操作,那么您将看到代码速度的显着提高。在整个矩阵上运行时,许多函数要快得多,而不是以循环的元素方式运行。