matlab - 编程练习: Does not creating variables at first lead to faster computation?

标签 matlab

我有 abA

a = some expression 1
b = some expression 2
A = a + b

对比

A = some expression 1 + some expression 2

在我的代码中,不仅有 ab,还有很多。通过使用后一种方法而不首先创建变量,即仅将 A 中的所有表达式相加,我的程序速度加快了 1 秒,总计约为 11 秒。经过长时间的测试证实了这一点。所以从11s减少到10s左右。这是因为一开始没有创建变量吗?一开始不创建变量是否会导致计算速度更快? 我需要运行大量的 for 循环并运行 ode 求解器并进行长时间计算。变量在循环内计算和创建。如果我能减少大约 10%,那就太好了。

最佳答案

一般情况下(不仅仅是 MATLAB)。

您的第一个场景需要这些额外的步骤,这些步骤不适用于第二个场景。

  1. 创建变量时,需要分配内存来存储变量的值。
  2. 当为该变量赋值时,需要将该值写入该变量在内存中的空间。
  3. 当请求计算时,需要从内存中检索每个变量的值。

许多编译器通过使用各种技术来优化这些额外的开销,但许多解释语言却没有。 (但这不是一个硬性规定,有聪明的解释语言和愚蠢的编译语言)。

我不知道 MATLAB 的内部结构到底是如何工作的,但我确实认为它是 解释,这意味着额外的步骤可能会产生额外的开销。

第二个场景的问题是,从长远来看,它的可读性和可维护性较差。使用变量名称时更容易阅读计算和中间步骤。诀窍是平衡性能和可读性。

关于matlab - 编程练习: Does not creating variables at first lead to faster computation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39049164/

相关文章:

Matlab 对象在 .mat 文件中占用较大空间

json - 类方法的自定义代码完成?

performance - 计算矩阵值包括 0 的频率

Matlab去除人声

arrays - 在MATLAB中: How should nested fields of a struct be converted to a cell array?

Matlab 均匀分布到指数分布

matlab - 制作多对角矩阵的有效方法

matlab - 具有 NaN 元素的数组排序在其位置上保持不变

Python - 如何使用其他 numpy 数组正确索引 numpy 数组,类似于 MATLAB

c - 在 C 中使用大数组时出现 EXCEPTION_ACCESS_VIOLATION