在Matlab中使用矩阵函数和运算符是否会使代码速度合理加快?

在Matlab中使用矩阵函数和运算符是否会使代码速度合理加快?,matlab,matrix,Matlab,Matrix,我正在写一个机器学习代码,我努力找到用矩阵操作来进行一些操作的方法,而不是用基本for循环来进行迭代。您认为使用矩阵而不是迭代会产生如此大的差异,还是性能差异可以忽略?过去,matlab中的循环非常缓慢。然而,在具有新的JIT编译循环的Matlab版本中,循环速度可能相当快 在Matlab中,建议尽可能避免循环,因为该语言作为一个整体是为基于向量的操作而设计的。在编写matlab代码时,在向量上循环而不是使用基于向量的数学被认为是不好的方式 好的matlab代码: [a b] = deal( r

我正在写一个机器学习代码,我努力找到用矩阵操作来进行一些操作的方法,而不是用基本for循环来进行迭代。您认为使用矩阵而不是迭代会产生如此大的差异,还是性能差异可以忽略?

过去,matlab中的循环非常缓慢。然而,在具有新的JIT编译循环的Matlab版本中,循环速度可能相当快

在Matlab中,建议尽可能避免循环,因为该语言作为一个整体是为基于向量的操作而设计的。在编写matlab代码时,在向量上循环而不是使用基于向量的数学被认为是不好的方式

好的matlab代码:

[a b] = deal( rand(10,1) );
c = a+b;
[a b] = deal( rand(10,1) );
c = zero(10,1);
for i = 1:10
  c(i) = a(i) + b(i);
错误的matlab代码:

[a b] = deal( rand(10,1) );
c = a+b;
[a b] = deal( rand(10,1) );
c = zero(10,1);
for i = 1:10
  c(i) = a(i) + b(i);
这两种实现都是“正确的”,但是99%的matlab程序员将使用第一种实现。此外,任何matlab程序员都会看到第一个实现,并确切知道代码的含义

关于性能,很难说向量操作是否比循环快,因为它实际上取决于实现细节。然而,根据我的经验,向量函数很少比循环慢。我遇到了算法问题,没有循环我无法解决。当我发现基于向量的解决方案时,它将计算时间从几分钟减少到不到一秒: