Matlab传值调用会导致效率低多少

更正一下题主问题中的两个错误:1. Matlab也可以使用传引用调用,参见Abstract class for deriving handle classes2. 即便是传值调用,也不意味着每次调用函数都要重新把变量在内存里复制一遍。实际上Matlab有其内部的内存管理机制:如果一个函数在内部不修改传进来的矩阵,则复制矩阵并不会发生;只有在函数内部对传进来的矩阵进行修改时,才会发生复制的动作。
■网友
之前做一个big data上的算法,因为matlab做些预处理数据很方便,所以一开始就用matlab。后来发现优化部分gradient descent很慢。于是我就把这部分部分剥离出来用c写,用mex编译后,回matlab里调用。结果问题就来了,速度比原来还慢!原因就是题主说的传值。因为每一轮循环中,在matlab 去调用那个mex时, 都要把那个100MB的矩阵复制一遍传到c里。。。
■网友
MatLab我不熟悉,只来说一下Python的情况Numpy里面默认从不进行值的复制操作,对np.array和np.matrix的索引操作只会返回视图,任何对索引后的结果的修改都会影响原数组,当需要copy的时候,可以手工调用np.copyPandas的索引操作会返回副本,但是如果把pd.DataFrame对象当作参数传入的时候,也是传递引用的我一直用这两个库工作,没有感觉到效率压力做一个拍脑袋的估计,我觉得MatLab因为按值传递造成的效率损失大概会增加30%-40%的运行时间
■网友
这个主要看你传递的变量的size有多大。


    推荐阅读