matlab - 在将其本地副本传递给 Matlab 中的函数后删除一个巨大的矩阵

标签 matlab function memory-management

考虑到我们有一个名为 A 的巨大矩阵,我们将其传递给函数 func(A),其中 func 我进行了一组计算,例如:

func(A):

B=A;

%% a lot of processes will happen on B here 

return B;

end

事实是,一旦我将 A 传递给 B,我在 Matlab session 中就不再与 A 有任何关系,因此它占用了不必要的内存空间。是否可以在调用 func 的脚本范围内删除它的实例?

最佳答案

使用 evalin使用选项 caller 您可以评估表达式 clear A:

function A = func(A)
    evalin('caller', 'clear A')
    A(1) = 5;
end

然而我们通常不知道输入变量的名称所以我们可以使用inputname获取工作区变量的实际名称:

function A = func(A)
    name = inputname(1);
    if ~isempty(name)
        evalin('caller', ['clear ' name])
    end
    A(1)=4;
end

1.这里的inputname(1)表示第一个参数的实际名称。

2.直接使用A,因为如果将A复制到B中,函数作用域将有两个A.

关于matlab - 在将其本地副本传递给 Matlab 中的函数后删除一个巨大的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48414849/

相关文章:

java - 高效地将 Java 列表转换为 Matlab 矩阵

c - 从C中的函数返回二维数组

ios4 - alloc、copy 和 new 有什么区别?

matlab - matlab 三维绘图

python - 使用 win32com Dispatch 启动 matlab,应用程序自行关闭

java - 从 jsp/jSTL MVC 应用程序访问 java <List>

javascript - 在函数参数声明中完成变量赋值

java - Date对象的内存使用情况

c - 如何检测 FreeRTOS 中的内存泄漏

MatLab - 分割以分离图像中的触摸对象