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有多大。
推荐阅读
- 特斯拉|特斯拉或将允许车主远程调用Autopilot摄像头
- webpack打包后的页面,在集成时,怎样提供js接口给父页面调用呢
- javascript 中this的四种调用模式
- C语言多维数组声明调用和c为啥差别这么大
- 阿贵看车|专访|宋军:后千万时代,吉利汽车更强调用户体验
- macOS 用PHP调用curl抓取不到https的数据
- Matlab求解闭合曲线围成图形面积的方法
- 怎样用matlab画出一张好看的3D流场图
- javascript函数的调用模式有哪几种
- 手机上html5调用摄像头录制视频并上传能实现吗
