我正在编写机器学习代码,我很难找到使用矩阵操作进行一些操作的方法,而不是使用基本 for 循环的迭代方法。您认为使用迭代以外的矩阵会产生如此大的差异还是可以忽略的性能差异?
问问题
55 次
1 回答
4
从历史上看,matlab 中的循环非常慢。但是,在具有新 JIT 编译循环的 Matlab 版本中,速度可能非常快。
在 Matlab 中,建议尽可能避免循环,因为整个语言都是为基于向量的操作而设计的。在编写 matlab 代码时,它认为循环遍历向量而不是使用基于向量的数学是不好的风格。
好的matlab代码:
[a b] = deal( rand(10,1) );
c = a+b;
错误的matlab代码:
[a b] = deal( rand(10,1) );
c = zero(10,1);
for i = 1:10
c(i) = a(i) + b(i);
这两个实现都是“正确的”,但是 99% 的 matlab 程序员会使用第一个实现。此外,任何 matlab 程序员都会看到第一个实现并确切地知道代码的含义。
关于性能,很难事先说向量操作是否比循环快,因为它实际上取决于实现细节。但是,根据我的经验,向量函数很少比循环慢。我遇到了没有循环就无法解决的算法问题。当我发现基于向量的解决方案时,它将计算时间从几分钟减少到不到一秒:如何优化这个索引算法
于 2012-11-10T19:40:26.733 回答