我正在微观优化内部循环,并在分析器(R2013b)中遇到了一些我不理解的东西:
C是2x2矩阵,x和y是数据,其他一切都是标量。为什么第33行和第34行之间的速度差异都在做同样的事情 - 为数组中的条目指定标量。如果我交换这两行的行为是相同的,第二行是慢得多。
这是一个分析器错误还是有什么事情我不明白?即使我扩展到几分钟(例如,第32行和第34行占用相同的时间),该比率也是相同的。我无法看到如何在这里触发写入时复制或类似操作,因此速度差异对我没有任何意义。在这里节省30%对我来说将是一个巨大的胜利。
感谢您的帮助
答案 0 :(得分:1)
我认为第二个较慢的原因不在于行的内容,而是在实际使用矩阵时更多。在第一行中,matlab'知道'它不需要做任何事情,因为下一行是C
中的独立变化。
如果你想验证它不在行的内容中,可以在下面添加C(1,1)=Cxy
之类的东西作为第三行,可能现在前两行都会快速显示。
基本上这意味着你可能不会太多地提高速度。
也许您可以尝试逻辑索引,因为它可能稍快(未经测试)。
C([false true; true false]) = Cxy;
或者可能是线性逻辑索引:
C([false true true false]) = Cxy;
对于它的价值,我猜想整个效果是由于Matlab遵循的及时原则。