我有几个大型矩阵应该在迭代算法中多次传递给不同的函数。如何避免将不必要的变量复制到函数中以加速程序?有没有办法在结构或类中对这些矩阵进行分组,并通过引用或指针传递它们?
a=zeros(1000,1000);
b=zeros(1000,1000);
d=myfunction(a,b);
a=myfunction2(b,d);
....
感谢。
更新:我应该在评论中提供更多详细信息。我有几个大矩阵。其中很少一部分在程序中保持不变,而其他部分在每次迭代时都会发生变化。因此,如果我按值传递这些矩阵,Matlab会复制它,更改值并再次将它们复制为函数的输出,然后它们超出范围并被销毁,并且在每次迭代时所有这些不必要的复制都会使程序生成非常慢。如果我用C ++编程,我会为这些矩阵使用面向对象的编程,我会将它们作为函数的引用传递给我,但我不知道这是否可以在MATLAB中使用。
答案 0 :(得分:1)
安德的评论绝对正确。也就是说,如果您确实需要函数来修改变量内容,那么您可能需要考虑重构代码以尝试避免这种情况。我知道你发布的代码只是一个简化的例子,但是你可以看一下这个问题并提出诸如“do a
和b
之类的问题需要在函数之外初始化吗?函数可以初始化它们吗?并返回他们?“。
如果真的无法绕过它,那么您可以将数据封装在handle class中,并将句柄类传递给函数。